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

墨辰丷
Libérer: 2023-03-27 14:12:02
original
1480 Les gens l'ont consulté

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)); 
?>
Copier après la connexion

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;; 
} 
?>
Copier après la connexion

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;; 
} 
?>
Copier après la connexion

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

Array 
( 
 [content] => fdipzone blog 
)
Copier après la connexion

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)); 
?>
Copier après la connexion

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, &#39;帐号:密码&#39;);

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;; 
} 
?>
Copier après la connexion

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;; 
} 
?>
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal