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

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

黄舟
黄舟Original
2017-03-22 10:20:221733Durchsuche

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()


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;
 }

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

application/json

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

application/x-www-form-urlencoded

-Methode und übergab die Daten direkt im

$_POST

-Codierungsformat, sodass ich keine Änderungen vorgenommen habe.

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

application/x-www-form-urlencoded
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()
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

codiert.

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

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

hat das folgende Format:

key=>value

Dieser Anforderungsparameter ist standardmäßig im


-Format codiert.

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

multipart/form-data
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()

(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()




erhält die folgende Zeichenfolge:

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


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

application/x-www-form-urlencoded进
und übergeben Sie



weiter die empfangende Seite Oder verwenden Sie

application/json

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

file_get_contents(“php://input”)

$GLOBALS[‘HTTP_RAW_POST_DATA']


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))
      );

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

application/json

oder

$_POST

bezogen werden.

file_get_contents(“php://input”)

Zusammenfassung

$GLOBALS[‘HTTP_RAW_POST_DATA']
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:

Stellungnahme:
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