Maison  >  Article  >  développement back-end  >  PHP utilise stream_context_create() pour simuler la méthode de requête POST/GET et un exemple d'analyse

PHP utilise stream_context_create() pour simuler la méthode de requête POST/GET et un exemple d'analyse

墨辰丷
墨辰丷original
2018-06-04 10:35:321759parcourir

Cet article présente principalement comment PHP utilise stream_context_create() pour simuler les requêtes POST/GET. Il analyse en détail le principe de stream_context_create pour simuler les requêtes POST/GET sous forme d'exemples, de méthodes d'utilisation et de précautions associées. peut Pour référence,

Parfois, nous devons simuler POST/GET et d'autres requêtes côté serveur, c'est-à-dire implémenter la simulation dans le programme PHP. En d’autres termes, dans un programme PHP, si on vous donne un tableau, comment POST/GET ce tableau à une autre adresse ? Bien sûr, c'est facile de le faire en utilisant CURL, mais que se passe-t-il si vous n'utilisez pas la bibliothèque CURL ? En fait, il existe déjà une fonction connexe implémentée en PHP, et cette fonction est stream_context_create() dont je parlerai ensuite.

Vous montrer le code directement, c'est le meilleur moyen :


$data = array(
    'foo'=>'bar', 
    'baz'=>'boom', 
    'site'=>'localhost', 
    'name'=>'nowa magic'); 
$data = http_build_query($data); 
//$postdata = http_build_query($data);
$options = array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-type:application/x-www-form-urlencoded',
        'content' => $data
        //'timeout' => 60 * 60 // 超时时间(单位:s)
    )
);
$url = "http://localhost/test2.php";
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
echo $result;


http Le le code de ://localhost/test2.php est :


$data = $_POST;
echo &#39;<pre class="brush:php;toolbar:false">&#39;;
print_r( $data );
echo &#39;
';


Le résultat en cours d'exécution est :


Array
(
  [foo] => bar
  [baz] => boom
  [site] => localhost
  [name] => nowa magic
)


Quelques points clés à expliquer :

1. Le programme ci-dessus utilise la fonction http_build_query() Si vous avez besoin de savoir. pour en savoir plus, vous pouvez vous référer à l'article précédent "Comment PHP utilise http_build_query() pour construire une chaîne d'URL".

2. stream_context_create() est utilisé pour créer des options de contexte pour l'ouverture de fichiers, telles que l'accès avec POST, l'utilisation d'un proxy, l'envoi d'en-têtes, etc. Créez simplement un flux, donnons un autre exemple :


$context = stream_context_create(array( 
    &#39;http&#39; => array( 
        &#39;method&#39; => &#39;POST&#39;, 
        &#39;header&#39; => sprintf("Authorization: Basic %s\r\n", base64_encode($username.&#39;:&#39;.$password)). 
        "Content-type: application/x-www-form-urlencoded\r\n", 
        &#39;content&#39; => http_build_query(array(&#39;status&#39; => $message)), 
        &#39;timeout&#39; => 5, 
    ), 
)); 
$ret = file_get_contents(&#39;http://twitter.com/statuses/update.xml&#39;, false, $context);


3 Les options de contexte créées par stream_context_create peuvent être utilisées pour le flux ( flux), et peut également être utilisé dans les systèmes de fichiers. Il est plus utile pour les fonctions telles que file_get_contents, file_put_contents et readfile qui opèrent directement sur les noms de fichiers sans descripteurs de fichiers. L'ajout d'en-têtes à stream_context_create n'est qu'une partie de la fonction. Vous pouvez également définir des proxys, des délais d'attente, etc. Cela rend la fonction d'accès au Web pas plus faible que curl.

4. La fonction de stream_context_create() : créer et renvoyer un flux de données texte et appliquer diverses options, qui peuvent être utilisées pour les paramètres de délai d'attente, les serveurs proxy, les méthodes de requête et les paramètres d'informations d'en-tête de fopen(), file_get_contents() et autres processus spéciaux.

5. stream_context_create peut également résoudre le traitement du délai d'attente de file_get_contents en ajoutant l'option de délai d'attente :


$opts = array(
  &#39;http&#39;=>array(
  &#39;method&#39;=>"GET",
  &#39;timeout&#39;=>60,
 )
);
//创建数据流上下文
$context = stream_context_create($opts);
$html =file_get_contents(&#39;http://localhost&#39;, false, $context);
//fopen输出文件指针处的所有剩余数据:
//fpassthru($fp); //fclose()前使用

Résumé : ce qui précède représente l'intégralité du contenu de cet article. , j’espère que cela pourra être utile à l’étude de chacun.

Recommandations associées :

phpPrincipe de tri rapide et méthode de mise en œuvre et exemple d'analyse

PHPExcel Méthodes et exemples simples pour implémenter la lecture de fichiers Excel

Le framework PHP MVC skymvc prend en charge plusieurs méthodes d'implémentation de téléchargement de fichiers

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