Detaillierte Erläuterung der Vorsichtsmaßnahmen für die Verwendung der PHP-Curl-Funktion zum Senden von Post-Anfragen

黄舟
Freigeben: 2023-03-06 07:28:02
Original
1643 Leute haben es durchsucht

Vorwort
Vor ein paar Tagen bin ich bei der Arbeit auf eine Anforderung gestoßen. Wenn der Benutzer auf eine bestimmte Schaltfläche klickt, wird im Hintergrund eine Post-Anfrage an mich initiiert und ich akzeptiere die übergebenen Daten . Zuerst schickte mein Kollege es mit der vom Unternehmens-Framework öffentlich gekapselten Methode

http_request()
Nach dem Login kopieren
Nach dem Login kopieren


Zuerst habe ich es nicht getan. Da ich nicht auf die übergebenen Daten achten möchte, verwende ich im Hintergrund direkt die Datenmethode, die das Kodierungsformat

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;
 }
Nach dem Login kopieren

akzeptiert, um die übergebenen Daten abzurufen (das ist, verwenden Sie direkt die Methode

application/json
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

), aber natürlich wurde nichts erhalten und nichts erhalten. Später änderte mein Kollege direkt die

application/x-www-form-urlencoded
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

-Methode und übergab die Daten direkt im

$_POST
Nach dem Login kopieren
Nach dem Login kopieren

-Codierungsformat, sodass ich keine Änderungen vorgenommen habe.

http_request()
Nach dem Login kopieren
Nach dem Login kopieren
Bezüglich der obigen Frage habe ich mich immer gefragt, warum ich die Daten damals nicht weitergegeben bekam.

application/x-www-form-urlencoded
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Heute ist das Projekt im Wesentlichen abgeschlossen und Folgendes wurde untersucht. Wenn die



-Funktion in

php eine Post-Anfrage ausführt, kann das Format der Daten auf folgende Weise übergeben werden:
(1) : by Eine Zeichenfolge von

curl()
Nach dem Login kopieren
Nach dem Login kopieren
Schlüssel-Wert-Paaren, die durch die Verkettung von Parametern gebildet werden. Das Formular ist wie folgt:



Diese Art von Anforderungsparameter ist standardmäßig gemäß

key=>value
Nach dem Login kopieren
Nach dem Login kopieren

codiert.

(2): Ein Array von
name=xxx&age=23$sex=1
Nach dem Login kopieren

Schlüssel-Wert-Paaren bestehend aus Parametern (kann nur ein eindimensionales Array sein, höherdimensionale Arrays melden einen Fehler).
application/x-www-form-urlencoded
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

hat das folgende Format:

key=>value
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Anforderungsparameter ist standardmäßig im


-Format codiert.

[ name="xxx" , age = 23 , sex = 男 ]
Nach dem Login kopieren
Wie oben erwähnt,

multipart/form-data
Nach dem Login kopieren
Bei einer Post-Anfrage können nur eindimensionale Arrays als Parameter übergeben werden. Was ist also zu tun, wenn Sie mehrdimensionale Arrays übergeben möchten? ?



Es gibt zwei Möglichkeiten, damit umzugehen, nämlich Methode 3 und Methode 4 unten.

curl()
Nach dem Login kopieren
Nach dem Login kopieren

(3): Verarbeiten Sie das mehrdimensionale Array mit

und warten Sie auf eine Zeichenfolge im Schlüssel-Wert-Paar-Format „key=>value“.
wie unten gezeigt:

http_build_query()
Nach dem Login kopieren




erhält die folgende Zeichenfolge:

$data = [
          "msg"=>"这是一条测试数据",
          "xxx" => "yyyy",
          "msg_data" => [
                          "name"=>"sunms",
                          "age"=>23,
                          "sex"=>"男",
                          "content"=>[
                                 1,2,3
                                ]
                       ],
       ];
Nach dem Login kopieren


Diese Methode wird auch über die Zeile


codiert und kann direkt über $_POST beim Empfänger abgerufen werden.

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
Nach dem Login kopieren
(4): Konvertieren Sie das mehrdimensionale Array in eine Zeichenfolge im JSON-Format, codieren Sie die Zeichenfolge im Format

application/x-www-form-urlencoded进
Nach dem Login kopieren
und übergeben Sie



weiter die empfangende Seite Oder verwenden Sie

application/json
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

, um die übergebene JSON-Formatzeichenfolge abzurufen, und konvertieren Sie dann die JSON-Formatzeichenfolge zur Verarbeitung in ein Array.

file_get_contents(“php://input”)
Nach dem Login kopieren
Nach dem Login kopieren

$GLOBALS[‘HTTP_RAW_POST_DATA']
Nach dem Login kopieren
Nach dem Login kopieren


Hinweis:
Für Daten, die im Format

$data = [];
$data_string = json_encode($data);
.....
//设置header信息
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
               'Content-Type: application/json',
               'Content-Length: ' . strlen($data_string))
      );
Nach dem Login kopieren

codiert sind,
Es kann nicht direkt bezogen werden, sondern muss über

application/json
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

oder

$_POST
Nach dem Login kopieren
Nach dem Login kopieren

bezogen werden.

file_get_contents(“php://input”)
Nach dem Login kopieren
Nach dem Login kopieren

Zusammenfassung

$GLOBALS[‘HTTP_RAW_POST_DATA']
Nach dem Login kopieren
Nach dem Login kopieren
Oben finden Sie eine detaillierte Erläuterung der Vorsichtsmaßnahmen für die Verwendung der Curl-Funktion zum Senden von Post-Anfragen in PHP. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!



-->
Verwandte Artikel:

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!