この記事では主にPHPでcurlやfile_get_contentsを実装して認証が必要なページを取得する方法を紹介しますので、興味のある方は参考にしていただければ幸いです。
たとえば、取得するページ: http://localhost/server.php
<?php $content = isset($_POST['content'])? $_POST['content'] : ''; header('content-type:application/json'); echo json_encode(array('content'=>$content)); ?>
curlを使用してserver.phpページを取得します
<?php $url = 'http://localhost/server.php'; $param = array('content'=>'fdipzone blog'); $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['http_code']==200){ $data = json_decode($ret, true); print_r($data); }else{ echo 'POST Fail'; } ?>
サービスの場合phpカールがインストールされていません 拡張機能を使用すると、file_get_contentsを使用してリクエストを開始し、ページの戻りデータを取得することもできます
<?php $url = 'http://localhost/server.php'; $param = array('content'=>'fdipzone blog'); $opt = array( 'http' => array( 'method' => 'POST', 'header' => 'content-type:application/x-www-form-urlencoded', 'content' => 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 'POST Fail'; } ?>
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['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="localhost"'); header("HTTP/1.0 401 Unauthorized"); exit; }else{ if (($_SERVER['PHP_AUTH_USER']!= "fdipzone" || $_SERVER['PHP_AUTH_PW']!="654321")) { header('WWW-Authenticate: Basic realm="localhost"'); header("HTTP/1.0 401 Unauthorized"); exit; } } $content = isset($_POST['content'])? $_POST['content'] : ''; header('content-type:application/json'); echo json_encode(array('content'=>$content)); ?>
アカウントを設定: fdipzone パスワード: 654321
curlでは、1つのパラメータはCURLOPT_USERPWDです。これを使用してくださいリクエスト時にアカウントのパスワードを送信するためのパラメータ。
curl_setopt($ch, CURLOPT_USERPWD, '帐号:密码');
curlによって要求されたプログラムは次のように変更されます:
<?php $url = 'http://localhost/server.php'; $param = array('content'=>'fdipzone blog'); $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, 'fdipzone:654321'); // 加入这句 $ret = curl_exec($ch); $retinfo = curl_getinfo($ch); curl_close($ch); if($retinfo['http_code']==200){ $data = json_decode($ret, true); print_r($data); }else{ echo 'POST Fail'; } ?>
そして、file_get_contents アカウントとパスワードを送信したい場合は、ヘッダーを手動で結合する必要があります
file_get_contents 要求されたプログラムは次のとおりですに変更されました:
<?php $url = 'http://localhost/server.php'; $param = array('content'=>'fdipzone blog'); $auth = sprintf('Authorization: Basic %s', base64_encode('fdipzone:654321')); // 加入这句 $opt = array( 'http' => array( 'method' => 'POST', 'header' => "content-type:application/x-www-form-urlencoded\r\n".$auth."\r\n", // 把$auth加入到header 'content' => 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 'POST Fail'; } ?>
関連する推奨事項:
PHP の file_put_contents 関数の詳細な説明
PHP は file_get_contents を使用します http を送信する手順の詳細な説明リクエスト
file_get_contents 機能紹介と使い方を詳しく解説
以上がPHP は、認証が必要なページを取得するために、curl または file_get_contents を実装します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。