Wenn wir unter normalen Umständen CURL zum Übermitteln von POST-Daten verwenden, sind wir es gewohnt, sie so zu schreiben:
curl_setopt( $ch, CURLOPT_POSTFIELDS,$post_data);
Aber diese Schreibmethode ist manchmal nicht sehr nützlich, vielleicht erhalten Sie 500 Vom Server zurückgegebener Fehler. Wenn wir jedoch versuchen, Daten über Socket an den Server zu senden, erhalten wir sehr korrekte Ergebnisse.
Zum Beispiel haben wir die folgende PHP-Datei auf dem Server:
<?php print_r($_SERVER);?>
Wenn wir CURL verwenden, um einige Daten an den Server zu senden, ohne auf Details zu achten, erhalten wir möglicherweise die folgenden Ergebnisse: Nicht unser ideales Ergebnis:
[CONTENT_TYPE] => multipart/form-data; boundary=—————————-f924413ea122
Aber wenn wir http_build_query($post_data) anstelle von $post_data verwenden und dann Daten an dieses PHP-Skript senden, erhalten wir andere Ergebnisse als oben. Dies ist unser ideales Ergebnis :
[CONTENT_TYPE] => application/x-www-form-urlencoded
Aus dem obigen Beispiel ist nicht schwer zu erkennen, dass bei Verwendung von CURL und dem Parameter Daten beim Senden von Daten an den Server der HTTP-Header Content_type: application/ x-www- sendet. formular-urlencodiert. Dies ist der Header, der vom Browser gesendet wird, wenn das Formular auf einer normalen Webseite gesendet wird
Das offizielle Handbuch sagt Folgendes:
The full data to post in a HTTP “POST” operation. To post a file, prepend a filename with @ and use the full path. This can either be passed as a urlencoded string like ‘para1=val1¶2=val2&…' or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data.
Bei der Verwendung eines Arrays zur Bereitstellung von Beitragsdaten muss die CURL-Komponente wahrscheinlich mit der @filename-Schreibmethode zum Hochladen von Dateien kompatibel sein. Standardmäßig ist der content_type ist auf multipart/form-data eingestellt. Obwohl es auf die meisten Server keine Auswirkungen hat, gibt es immer noch eine kleine Anzahl von Servern, die nicht kompatibel sind.
Nach einer kurzen Zusammenfassung kamen wir schließlich zu dem Schluss: Wenn keine Notwendigkeit zum Hochladen von Dateien besteht, versuchen Sie, eine http_build_query-Verarbeitung für die per Post übermittelten Daten durchzuführen und diese dann zu versenden, um eine bessere Kompatibilität und kleinere Anforderungen zu erzielen Datenpakete.
Weitere Informationen zur Verwendung der CURLOPT_POSTFIELDS-Parameter von CURL in PHP finden Sie auf der chinesischen PHP-Website!