ホームページ > バックエンド開発 > PHPチュートリアル > PHP は、認証が必要なページを取得するために、curl または file_get_contents を実装します。

PHP は、認証が必要なページを取得するために、curl または file_get_contents を実装します。

墨辰丷
リリース: 2023-03-27 14:12:02
オリジナル
1494 人が閲覧しました

この記事では主にPHPでcurlやfile_get_contentsを実装して認証が必要なページを取得する方法を紹介しますので、興味のある方は参考にしていただければ幸いです。

たとえば、取得するページ: http://localhost/server.php

<?php 
$content = isset($_POST[&#39;content&#39;])? $_POST[&#39;content&#39;] : &#39;&#39;; 
header(&#39;content-type:application/json&#39;); 
echo json_encode(array(&#39;content&#39;=>$content)); 
?>
ログイン後にコピー

curlを使用してserver.phpページを取得します

<?php 
$url = &#39;http://localhost/server.php&#39;; 
$param = array(&#39;content&#39;=>&#39;fdipzone blog&#39;); 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$ret = curl_exec($ch); 
$retinfo = curl_getinfo($ch); 
curl_close($ch); 
if($retinfo[&#39;http_code&#39;]==200){ 
 $data = json_decode($ret, true); 
 print_r($data); 
}else{ 
 echo &#39;POST Fail&#39;; 
} 
?>
ログイン後にコピー

サービスの場合phpカールがインストールされていません 拡張機能を使用すると、file_get_contentsを使用してリクエストを開始し、ページの戻りデータを取得することもできます

<?php 
$url = &#39;http://localhost/server.php&#39;; 
$param = array(&#39;content&#39;=>&#39;fdipzone blog&#39;); 

$opt = array( 
 &#39;http&#39; => array( 
  &#39;method&#39; => &#39;POST&#39;, 
  &#39;header&#39; => &#39;content-type:application/x-www-form-urlencoded&#39;, 
  &#39;content&#39; => http_build_query($param) 
 ) 
); 

$context = stream_context_create($opt); 

$ret = file_get_contents($url, false, $context); 

if($ret){ 
 $data = json_decode($ret, true); 
 print_r($data); 
}else{ 
 echo &#39;POST Fail&#39;; 
} 
?>
ログイン後にコピー

curlとfile_get_contentsを使用して返される結果は同じです。

Array 
( 
 [content] => fdipzone blog 
)
ログイン後にコピー

htpasswd+.htaccessを使用してディレクトリアクセス権限を設定するページなど、認証が必要なページの場合、上記の方法を直接使用すると、401 Unauthorizedエラーが返されます。

この例では、アクセス許可の制御に htpasswd+.htaccess を使用しませんが、2 つのサーバー パラメーター $_SERVER['PHP_AUTH_USER'] $_SERVER['PHP_AUTH_PW'] を使用します。

http://localhost/server.phpを次のように変更しました:

<?php 
if(!isset($_SERVER[&#39;PHP_AUTH_USER&#39;])) 
{ 
 header(&#39;WWW-Authenticate: Basic realm="localhost"&#39;); 
 header("HTTP/1.0 401 Unauthorized"); 
 exit; 
}else{ 
 if (($_SERVER[&#39;PHP_AUTH_USER&#39;]!= "fdipzone" || $_SERVER[&#39;PHP_AUTH_PW&#39;]!="654321")) { 
  header(&#39;WWW-Authenticate: Basic realm="localhost"&#39;); 
  header("HTTP/1.0 401 Unauthorized"); 
  exit; 
 } 
} 
$content = isset($_POST[&#39;content&#39;])? $_POST[&#39;content&#39;] : &#39;&#39;; 
header(&#39;content-type:application/json&#39;); 
echo json_encode(array(&#39;content&#39;=>$content)); 
?>
ログイン後にコピー

アカウントを設定: fdipzone パスワード: 654321

curlでは、1つのパラメータはCURLOPT_USERPWDです。これを使用してくださいリクエスト時にアカウントのパスワードを送信するためのパラメータ。

curl_setopt($ch, CURLOPT_USERPWD, &#39;帐号:密码&#39;);

curlによって要求されたプログラムは次のように変更されます:

<?php 
$url = &#39;http://localhost/server.php&#39;; 
$param = array(&#39;content&#39;=>&#39;fdipzone blog&#39;); 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($param)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_USERPWD, &#39;fdipzone:654321&#39;); // 加入这句 
$ret = curl_exec($ch); 
$retinfo = curl_getinfo($ch); 
curl_close($ch); 
if($retinfo[&#39;http_code&#39;]==200){ 
 $data = json_decode($ret, true); 
 print_r($data); 
}else{ 
 echo &#39;POST Fail&#39;; 
} 
?>
ログイン後にコピー

そして、file_get_contents アカウントとパスワードを送信したい場合は、ヘッダーを手動で結合する必要があります

file_get_contents 要求されたプログラムは次のとおりですに変更されました:

<?php 
$url = &#39;http://localhost/server.php&#39;; 
$param = array(&#39;content&#39;=>&#39;fdipzone blog&#39;); 

$auth = sprintf(&#39;Authorization: Basic %s&#39;, base64_encode(&#39;fdipzone:654321&#39;)); // 加入这句 

$opt = array( 
 &#39;http&#39; => array( 
  &#39;method&#39; => &#39;POST&#39;, 
  &#39;header&#39; => "content-type:application/x-www-form-urlencoded\r\n".$auth."\r\n", // 把$auth加入到header 
  &#39;content&#39; => http_build_query($param) 
 ) 
); 

$context = stream_context_create($opt); 

$ret = file_get_contents($url, false, $context); 

if($ret){ 
 $data = json_decode($ret, true); 
 print_r($data); 
}else{ 
 echo &#39;POST Fail&#39;; 
} 
?>
ログイン後にコピー

関連する推奨事項:

PHP の file_put_contents 関数の詳細な説明

PHP は file_get_contents を使用します http を送信する手順の詳細な説明リクエスト

file_get_contents 機能紹介と使い方を詳しく解説

以上がPHP は、認証が必要なページを取得するために、curl または file_get_contents を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート