>백엔드 개발 >PHP 튜토리얼 >PHP는 승인이 필요한 페이지를 얻기 위해 컬 또는 file_get_contents를 구현합니다.

PHP는 승인이 필요한 페이지를 얻기 위해 컬 또는 file_get_contents를 구현합니다.

墨辰丷
墨辰丷원래의
2018-05-22 16:30:021522검색

이 글은 인증이 필요한 페이지를 얻기 위해 PHP에서 컬이나 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를 사용하지 않지만 $_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에서 매개 변수 중 하나는 CURLOPT_USERPWD입니다. 이 요청할 때 계정 비밀번호를 보내는 매개변수입니다.

curl_setopt($ch, CURLOPT_USERPWD, '帐号:密码'); 

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.