Maison  >  Article  >  développement back-end  >  PHP implémente curl ou file_get_contents pour obtenir la page qui nécessite une autorisation

PHP implémente curl ou file_get_contents pour obtenir la page qui nécessite une autorisation

墨辰丷
墨辰丷original
2018-05-22 16:30:021466parcourir

Cet article présente principalement comment implémenter curl ou file_get_contents en PHP pour obtenir la page qui nécessite une autorisation. Les amis intéressés peuvent s'y référer. J'espère que cela sera utile à tout le monde.

Par exemple, la page à obtenir : 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)); 
?>

Utilisez curl pour obtenir la page 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;; 
} 
?>

Si le service n'a pas le Extension php curl installée, utilisez file_get_contentsVous pouvez également lancer une demande et obtenir les données de retour de la page

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

Les résultats renvoyés en utilisant curl et file_get_contents sont les mêmes.

Array 
( 
 [content] => fdipzone blog 
)

Pour les pages qui nécessitent une autorisation, comme l'utilisation de htpasswd+.htaccess pour définir les autorisations d'accès au répertoire Page, en utilisant directement la méthode ci-dessus, renverra l'erreur 401 Unauthorized.

Cet exemple n'utilise pas htpasswd+.htaccess pour contrôler les autorisations d'accès, mais utilise $_SERVER['PHP_AUTH_USER'] et $ _SERVER[ 'PHP_AUTH_PW']Ces deux paramètres du serveur.

http://localhost/server.php Modifié en :

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

Définir le compte : fdipzone Mot de passe : 654321

Dans curl, un paramètre est CURLOPT_USERPWD Nous pouvons utiliser ce paramètre pour envoyer le mot de passe du compte lors de la demande.

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

Le programme demandé par curl est modifié en :

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

Et file_get_contents Si vous souhaitez envoyer le numéro de compte et le mot de passe, vous devez épisser manuellement l'en-tête

file_get_contents Le programme demandé est modifié en :

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

Recommandations associées :

Explication détaillée de la fonction file_put_contents en PHP

PHP utilise file_get_contents Explication détaillée des étapes pour envoyer une requête http

file_get_contentsExplication détaillée de introduction et utilisation de la fonction

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn