Wenn ich curl
über POST
und Satz zu CURLOPT_POSTFIELD
tun habe ich urlencode
oder irgendein spezielles Format?
Zum Beispiel: Wenn ich 2 Felder posten möchte, zuerst und zuletzt:
first=John&last=Smith
Was ist der genaue Code / das genaue Format, das mit Curl verwendet werden soll?
$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$reply=curl_exec($ch);
curl_close($ch);
http_build_query($data)
da dies&
das Standardtrennzeichen ist.EDIT : Ab PHP5 wird die Verwendung von
http_build_query
empfohlen:Einfaches Beispiel aus dem Handbuch:
vor php5:
Aus dem Handbuch :
So etwas sollte also perfekt funktionieren (mit Parametern, die in einem assoziativen Array übergeben werden):
quelle
Übergeben Sie überhaupt keine Schnur!
Sie können ein Array übergeben und PHP / Curl die schmutzige Arbeit der Codierung usw. erledigen lassen.
quelle
http_build_query()
demselben Array)Laut PHP-Handbuch sollten Daten, die als Zeichenfolge an cURL übergeben werden, URL-codiert sein. Siehe die Seite für curl_setopt () und suchen Sie nach
CURLOPT_POSTFIELDS
.quelle
Denn
CURLOPT_POSTFIELDS
die Parameter können entweder als urlencodierte Zeichenfolgepara1=val1¶2=val2&..
oder als Array mit dem Feldnamen als Schlüssel und den Felddaten als Wert übergeben werdenVersuchen Sie das folgende Format:
quelle
json_encode()
ich gebe dir etwas ganz anderes als eine gültige Parameterzeichenfolge alsfirst=John&last=Smith
.json_encode()
wird ausgegeben:{"first":"John","last":"Smith"}
Dies wird dann der Rohkörper Ihrer POST-Anfrage.json_encode(...)
dohttp_build_query(...)
. Dadurch wird die erwartete "URL-codierte Zeichenfolge" erstellt, die die durch "&" getrennten Parameter enthält.Ein weiterer wichtiger Unterschied, der hier noch nicht erwähnt wird, besteht darin, dass
CURLOPT_POSTFIELDS
verschachtelte Arrays nicht verarbeitet werden können.Wenn wir das verschachtelte Array verwenden,
['a' => 1, 'b' => [2, 3, 4]]
sollte dies als parametrisiert werdena=1&b[]=2&b[]=3&b[]=4
(das[
und]
wird / sollte URL-codiert sein). Dies wird am anderen Ende automatisch wieder in ein verschachteltes Array konvertiert (vorausgesetzt, das andere Ende ist ebenfalls PHP).Das wird funktionieren:
Das wird nicht funktionieren:
Dies wird Sie benachrichtigen. Die Codeausführung wird fortgesetzt und Ihr Endpunkt erhält den Parameter
b
als Zeichenfolge"Array"
:quelle
Es kommt auf die an
content-type
URL-codierte oder mehrteilige / Formulardaten
Um Daten auf die übliche Weise zu senden, wie es ein Browser mit einem Formular tun würde, übergeben Sie einfach ein assoziatives Array . Wie im PHP-Handbuch angegeben:
JSON-Codierung
Bei der Kommunikation mit JSON-APIs muss der Inhalt jedoch JSON-codiert sein, damit die API unsere POST-Daten versteht.
In solchen Fällen muss der Inhalt explizit als JSON codiert werden:
Bei der Kommunikation in JSON setzen
accept
undcontent-type
kopieren wir normalerweise auch entsprechend:quelle
Für verschachtelte Arrays können Sie Folgendes verwenden:
quelle
Interessanterweise ist die Art und Weise, wie Postman POST ausführt, eine vollständige GET-Operation mit diesen zwei zusätzlichen Optionen:
Nur ein anderer Weg, und es funktioniert sehr gut.
quelle
Diese Antwort hat mich ewig gekostet. Ich habe festgestellt, dass Sie lediglich die URL ('?' Nach dem Dateinamen und der Erweiterung) mit der URL-codierten Abfragezeichenfolge verketten müssen. Es sieht nicht einmal so aus, als müssten Sie die POST cURL-Optionen festlegen. Siehe das gefälschte Beispiel unten:
Sie können auch verwenden
file_get_contents()
:quelle