Choses à noter lors de l'utilisation de la fonction PHP curl pour envoyer des requêtes Post

墨辰丷
Libérer: 2023-03-28 13:32:02
original
2704 Les gens l'ont consulté

Cet article vous présente principalement quelques précautions pour utiliser la fonction curl pour envoyer des requêtes Post en PHP. L'article le présente en détail à travers des exemples de codes et des explications. Il a une certaine valeur de référence pour que tous ceux qui apprennent ou utilisent PHP. en avez besoin, vous pouvez suivre l'éditeur pour apprendre.

Préface

Il y a quelques jours, j'ai rencontré une exigence au travail Lorsque l'utilisateur clique sur un bouton, une demande de publication est initiée dans. l'arrière-plan. Venez à moi, j'accepte les données transmises. Au début, les collègues utilisaient la méthode d'encapsulation publique du framework de l'entreprise http_request() pour envoyer, le code est le suivant :


 public function http_request( $url, $post = '', $timeout = 5 ){ 
 if( empty( $url ) ){
  return ;
 }
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
 
 if( $post != '' && !empty( $post ) ){
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($post)));
 }
 curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
 $result = curl_exec($ch);
 curl_close($ch);
 return $result;
 }
Copier après la connexion


Au début, je n'ai pas remarqué que les données transmises étaient une chaîne json codée application/json J'ai directement utilisé la méthode d'acceptation des données codées application/x-www-form-urlencoded en arrière-plan pour obtenir les données transmises (c'est-à-dire directement en utilisant le <. 🎜> méthode pour l'obtenir) , et bien sûr rien n'a été obtenu. Plus tard, mon collègue a directement changé la méthode $_POST et a directement transmis les données au format d'encodage http_request(). Je n'ai apporté aucune modification. application/x-www-form-urlencoded

Concernant la question ci-dessus, je me suis toujours demandé pourquoi je n'avais pas transmis les données à ce moment-là.

Aujourd'hui, le projet est pratiquement terminé et les éléments suivants ont été étudiés.

Lorsque la fonction

en PHP fait une requête de publication, le format des données peut être transmis des manières suivantes : curl()

(1) : épissé ​​par paramètres dans une chaîne de

paires clé-valeur. La forme est la suivante : key=>valuename=xxx&age=23$sex=1

Ce type de paramètre de requête est codé selon

par défaut. application/x-www-form-urlencoded

(2) :

tableau de paires clé-valeur composé de paramètres (ne peut être qu'un tableau unidimensionnel, les tableaux de dimension supérieure signaleront une erreur). key=>value

est au format suivant :


  [ name="xxx" , age = 23 , sex = 男 ]
Copier après la connexion


Ce paramètre de requête est par défaut au format

Codé . multipart/form-data

Comme mentionné ci-dessus,

lors d'une demande de publication, seuls les tableaux unidimensionnels peuvent être transmis en tant que paramètres. Alors, que faut-il faire si vous souhaitez transmettre des tableaux multidimensionnels ? curl()

Il existe deux façons de résoudre ce problème, à savoir la méthode 3 et la méthode 4 ci-dessous.

(3) : Traitez le tableau multidimensionnel avec

et attendez une chaîne au format key=>value. http_build_query()

comme indiqué ci-dessous :


$data = [
          "msg"=>"这是一条测试数据",
          "xxx" => "yyyy",
          "msg_data" => [
                          "name"=>"sunms",
                          "age"=>23,
                          "sex"=>"男",
                          "content"=>[
                                 1,2,3
                                ]
                       ],
       ];
Copier après la connexion


obtiendra la chaîne suivante :


msg=这是一条测试数据&xxx=yyyy&msg_data[name]=sunms&msg_data[age]=23&msg_data[sex]=男&msg_data[content][0]=1&msg_data[content][1]=2&msg_data[content][2]=3
Copier après la connexion


Cette méthode est également codée via la ligne

et peut être obtenue directement via $_POST chez le récepteur. application/x-www-form-urlencoded进

(4) : Convertissez le tableau multidimensionnel en une chaîne au format json, encodez la chaîne au format

et obtenez le format json transmis via application/json ou file_get_contents(“php://input”) au niveau de la chaîne du récepteur , puis convertissez la chaîne au format json en un tableau pour le traitement. $GLOBALS[‘HTTP_RAW_POST_DATA&#39;]


$data = [];
$data_string = json_encode($data);
.....
//设置header信息
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
               &#39;Content-Type: application/json&#39;,
               &#39;Content-Length: &#39; . strlen($data_string))
      );
Copier après la connexion


Remarque : Pour les données codées au format , application/json ne peut pas être obtenu directement, il doit être obtenu via $_POST ou file_get_contents(“php://input”). $GLOBALS[‘HTTP_RAW_POST_DATA']

Ce qui précède représente l’intégralité du contenu de cet article, j’espère qu’il sera utile à l’étude de chacun.


Recommandations associées :

php Méthode de mise en œuvre du parcours en boucle d'un tableau unidimensionnel

Comment PHP et MYSQL implémentent les idées de navigation par pagination

php array_reverse Explication détaillée du renvoi des tableaux dans l'ordre inverse

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!