이 글은 인증이 필요한 페이지를 얻기 위해 PHP에서 컬이나 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를 사용하지 않지만 $_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에서 매개 변수 중 하나는 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는 승인이 필요한 페이지를 얻기 위해 컬 또는 file_get_contents를 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!