Maison >développement back-end >tutoriel php >Choses à noter lors de l'utilisation de la fonction PHP curl pour envoyer des requêtes Post
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; }
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
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()
paires clé-valeur. La forme est la suivante : key=>value
name=xxx&age=23$sex=1
par défaut. application/x-www-form-urlencoded
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
[ name="xxx" , age = 23 , sex = 男 ]
Codé . multipart/form-data
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()
$data = [ "msg"=>"这是一条测试数据", "xxx" => "yyyy", "msg_data" => [ "name"=>"sunms", "age"=>23, "sex"=>"男", "content"=>[ 1,2,3 ] ], ];
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
et peut être obtenue directement via $_POST chez le récepteur. application/x-www-form-urlencoded进
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']
$data = []; $data_string = json_encode($data); ..... //设置header信息 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)) );
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']
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!