Heim  >  Artikel  >  Backend-Entwicklung  >  PHP implementiert Curl oder file_get_contents, um die Seite abzurufen, die eine Autorisierung erfordert

PHP implementiert Curl oder file_get_contents, um die Seite abzurufen, die eine Autorisierung erfordert

墨辰丷
墨辰丷Original
2018-05-22 16:30:021464Durchsuche

In diesem Artikel wird hauptsächlich erläutert, wie man Curl oder file_get_contents in PHP implementiert, um die Seite zu erhalten, für die eine Autorisierung erforderlich ist. Ich hoffe, dass er für alle hilfreich ist.

Zum Beispiel die abzurufende Seite: 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)); 
?>

Verwenden Sie Curl, um die server.php-Seite abzurufen

<?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;; 
} 
?>

Wenn der Dienst die PHP-Curl-Erweiterung nicht installiert hat , verwenden Sie file_get_contentsSie können auch eine Anfrage initiieren und die Seitenrückgabedaten abrufen

<?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;; 
} 
?>

Verwenden von Curl und file_get_contents zum Zurückgeben Die Ergebnisse sind die gleichen.

Array 
( 
 [content] => fdipzone blog 
)

Für Seiten, die eine Autorisierung erfordern, z. B. Seiten, die htpasswd+.htaccess verwenden, um Verzeichniszugriffsberechtigungen festzulegen , Wenn Sie die obige Methode direkt verwenden, wird der Fehler 401 Unauthorized zurückgegeben.

In diesem Beispiel wird nicht htpasswd+.htaccess zur Steuerung der Zugriffsberechtigungen verwendet, sondern $_SERVER['PHP_AUTH_USER'] und $ _SERVER[ 'PHP_AUTH_PW']Diese beiden Serverparameter.

http://localhost/server.php Geändert in:

<?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)); 
?>

Eingestellt Definiertes Konto: fdipzone Passwort: 654321

In Curl gibt es einen Parameter CURLOPT_USERPWD Wir können diesen Parameter verwenden, um das Kontopasswort bei der Anfrage zu senden.

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

Das von Curl angeforderte Programm wird geändert in:

<?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;; 
} 
?>

Und file_get_contents if Um die Kontonummer und das Passwort zu senden, müssen Sie den Header manuell zusammenfügen

file_get_contents Das angeforderte Programm wird geändert in:

<?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;; 
} 
?>

Verwandte Empfehlungen:

Detaillierte Erläuterung der Funktion „file_put_“contents in PHP

PHP verwendet file_get_contents zum Senden einer HTTP-Anfrage Detaillierte Erläuterung der Schritte

file_get_contentsDetaillierte Erläuterung der Funktionseinführung und -verwendung

Das obige ist der detaillierte Inhalt vonPHP implementiert Curl oder file_get_contents, um die Seite abzurufen, die eine Autorisierung erfordert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn