Ich poste Daten an eine externe API (mit PHP, falls relevant).
Sollte ich die von mir übergebenen POST-Variablen per URL codieren?
Oder muss ich nur GET-Daten per URL codieren?
Vielen Dank!
UPDATE: Dies ist mein PHP, falls es relevant ist:
$fields = array(
'mediaupload'=>$file_field,
'username'=>urlencode($_POST["username"]),
'password'=>urlencode($_POST["password"]),
'latitude'=>urlencode($_POST["latitude"]),
'longitude'=>urlencode($_POST["longitude"]),
'datetime'=>urlencode($_POST["datetime"]),
'category'=>urlencode($_POST["category"]),
'metacategory'=>urlencode($_POST["metacategory"]),
'caption'=>($_POST["description"])
);
$fields_string = http_build_query($fields);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
Antworten:
Allgemeine Antwort
Die allgemeine Antwort auf Ihre Frage ist, dass es darauf ankommt. Und Sie können entscheiden, indem Sie angeben, was Ihr "Inhaltstyp" in den HTTP-Headern ist.
Der Wert "application / x-www-form-urlencoded" bedeutet, dass Ihr POST-Body wie eine GET-Parameterzeichenfolge URL-codiert sein muss. Der Wert "Multipart / Formulardaten" bedeutet, dass Sie Inhaltsbegrenzer verwenden und den Inhalt NICHT per URL codieren.
Diese Antwort enthält eine viel gründlichere Erklärung, wenn Sie weitere Informationen wünschen.
Spezifische Antwort
Eine Antwort speziell für die von Ihnen verwendeten PHP-Bibliotheken (CURL) finden Sie in der Dokumentation hier .
Hier sind die relevanten Informationen:
quelle
@DougW hat diese Frage klar beantwortet, aber ich möchte hier noch einige Codes hinzufügen, um Dougs Punkte zu erklären. (Und korrigieren Sie Fehler im obigen Code)
Lösung 1: URL-Codierung der POST-Daten mit einem Header vom Inhaltstyp: application / x-www-form-urlencoded.
Hinweis: Sie müssen die $ _POST [] -Felder nicht einzeln urlencodieren. Die Funktion http_build_query () kann den Urlencodierungsjob problemlos ausführen.
Lösung 2: Übergeben Sie das Array direkt als Post-Daten ohne URL-Codierung, während der Content-Type-Header auf Multipart / Formulardaten gesetzt wird.
Beide Codefragmente funktionieren, verwenden jedoch unterschiedliche HTTP-Header und -Körper.
quelle
curl codiert die Daten für Sie. Legen Sie einfach Ihre Rohfelddaten in das Feldarray ab und weisen Sie es an, "los" zu gehen.
quelle
Die obigen Beiträge beantworten Fragen zur URL-Codierung und deren Funktionsweise. Die ursprünglichen Fragen lauteten jedoch "Soll ich POST-Daten per URL codieren?". was nicht beantwortet wird.
Aufgrund meiner jüngsten Erfahrungen mit der URL-Codierung möchte ich die Frage weiter ausbauen. "Sollte ich POST-Daten wie die GET-HTTP-Methode per URL codieren. Wenn HTML-Formulare über den Browser ausgefüllt, übermittelt und / oder einige Informationen abgerufen werden, führt der Browser eine URL-Codierung durch, aber wenn eine Anwendung einen Webdienst verfügbar macht und dies erwartet." Ist es architektonisch und technisch korrekt, eine URL-Codierung mit der POST-HTTP-Methode durchzuführen, wenn Verbraucher eine URL-Codierung für Daten durchführen? "
quelle