Heim >Backend-Entwicklung >PHP-Tutorial >Detaillierte Erläuterung der Vorsichtsmaßnahmen für die Verwendung der PHP-Curl-Funktion zum Senden von Post-Anfragen
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-urlencodedHeute 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 vonname=xxx&age=23$sex=1Schlü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-dataBei 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: