Wysyłam dane do zewnętrznego API (używając PHP, jeśli jest to istotne).
Czy powinienem zakodować w adresie URL zmienne POST, które przekazuję?
A może muszę tylko zakodować dane GET w adresie URL?
Dzięki!
AKTUALIZACJA: To jest mój PHP, na wypadek gdyby miał znaczenie:
$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);
Odpowiedzi:
Ogólna odpowiedź
Ogólna odpowiedź na twoje pytanie jest taka, że to zależy. Możesz zdecydować, określając swój „Content-Type” w nagłówkach HTTP.
Wartość „application / x-www-form-urlencoded” oznacza, że treść POST będzie musiała być zakodowana w adresie URL, tak jak ciąg parametru GET. Wartość „multipart / form-data” oznacza, że będziesz używać ograniczników treści, a NIE adresów URL do kodowania treści.
Ta odpowiedź ma znacznie dokładniejsze wyjaśnienie, jeśli chcesz uzyskać więcej informacji.
Konkretna odpowiedź
Aby uzyskać odpowiedź dotyczącą bibliotek PHP, których używasz (CURL), przeczytaj dokumentację tutaj .
Oto istotne informacje:
źródło
@DougW jasno odpowiedział na to pytanie, ale nadal chciałbym dodać tutaj kilka kodów, aby wyjaśnić punkty Douga. (I popraw błędy w powyższym kodzie)
Rozwiązanie 1: kodowanie URL danych POST z nagłówkiem typu zawartości: application / x-www-form-urlencoded.
Uwaga: nie musisz pojedynczo wpisywać urlencode $ _POST [] pól, funkcja http_build_query () może dobrze wykonać zadanie urlencoding.
Rozwiązanie 2: Przekaż tablicę bezpośrednio jako dane pocztowe bez kodowania adresu URL, podczas gdy nagłówek Content-Type zostanie ustawiony na multipart / form-data.
Oba fragmenty kodu działają, ale używają różnych nagłówków HTTP i treści.
źródło
curl zakoduje dane za Ciebie, po prostu upuść surowe dane pola do tablicy fields i powiedz mu, aby „go”.
źródło
Powyższe posty odpowiadają na pytania związane z kodowaniem adresów URL i jak to działa, ale pierwotne pytanie brzmiało „Czy dane POST z kodowaniem URL-i?” na który nie ma odpowiedzi.
Na podstawie mojego niedawnego doświadczenia z kodowaniem adresów URL chciałbym rozszerzyć to pytanie. „Czy powinienem zakodować dane POST w adresie URL, tak samo jak w metodzie GET HTTP. Generalnie formularze HTML w przeglądarce, jeśli są wypełnione, przesłane i / lub POBIERAJĄ niektóre informacje, przeglądarki wykonają kodowanie adresu URL, ale jeśli aplikacja ujawnia usługę internetową i oczekuje Konsumenci powinni kodować adresy URL na danych. Czy jest to poprawne architektonicznie i technicznie kodowanie adresów URL metodą POST HTTP? ”
źródło