Saya melakukan POST data ke API eksternal (menggunakan PHP, jika relevan).
Haruskah saya menyandikan URL variabel POST yang saya teruskan?
Atau apakah saya hanya perlu menyandikan URL data GET?
Terima kasih!
UPDATE: Ini adalah PHP saya, jika relevan:
$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);
Jawaban:
Jawaban Umum
Jawaban umum atas pertanyaan Anda adalah tergantung. Dan Anda dapat memutuskan dengan menentukan apa "Jenis Konten" Anda di header HTTP.
Nilai "application / x-www-form-urlencoded" berarti bahwa badan POST Anda harus dienkode URL seperti string parameter GET. Nilai "multipart / form-data" berarti bahwa Anda akan menggunakan pemisah konten dan BUKAN pengodean url konten.
Jawaban ini memiliki penjelasan yang jauh lebih lengkap jika Anda menginginkan informasi lebih lanjut.
Jawaban Khusus
Untuk jawaban khusus untuk pustaka PHP yang Anda gunakan (CURL), Anda harus membaca dokumentasinya di sini .
Berikut informasi yang relevan:
sumber
@DougW telah menjawab pertanyaan ini dengan jelas, tetapi saya masih ingin menambahkan beberapa kode di sini untuk menjelaskan poin Doug. (Dan perbaiki kesalahan pada kode di atas)
Solusi 1: Menyandikan URL data POST dengan header tipe konten: application / x-www-form-urlencoded.
Catatan: Anda tidak perlu meng-urlencode $ _POST [] satu per satu, fungsi http_build_query () dapat melakukan pekerjaan urlencoding dengan baik.
Solusi 2: Teruskan array secara langsung sebagai data posting tanpa pengkodean URL, sedangkan header Content-Type akan disetel ke multipart / form-data.
Kedua cuplikan kode berfungsi, tetapi menggunakan header dan badan HTTP yang berbeda.
sumber
curl akan menyandikan data untuk Anda, cukup letakkan data bidang mentah Anda ke dalam larik bidang dan beri tahu untuk "pergi".
sumber
Posting di atas menjawab pertanyaan yang terkait dengan Encoding URL dan Bagaimana cara kerjanya, tetapi pertanyaan asli adalah "Haruskah saya menyandikan URL data POST?" yang tidak terjawab.
Dari pengalaman saya baru-baru ini dengan Pengkodean URL, saya ingin memperluas pertanyaan lebih jauh. "Haruskah saya menyandikan URL data POST, sama seperti metode GET HTTP. Umumnya, Formulir HTML melalui Browser jika diisi, dikirim dan / atau DAPATKAN beberapa informasi, Browser akan melakukan Pengkodean URL tetapi Jika aplikasi menampilkan layanan web dan mengharapkan Konsumen harus melakukan URL-Encoding pada data, apakah secara Arsitektur dan Teknis benar untuk melakukan Encode URL dengan metode HTTP POST? "
sumber