Ketika saya menggunakan curl
via POST
dan set, CURLOPT_POSTFIELD
apakah saya harus urlencode
atau format khusus lainnya?
misalnya: Jika saya ingin memposting 2 bidang, pertama dan terakhir:
first=John&last=Smith
apa kode / format persis yang harus digunakan dengan curl?
$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)
karena&
pemisah default.EDIT : Dari php5 ke atas, penggunaan
http_build_query
direkomendasikan:Contoh sederhana dari manual:
sebelum php5:
Dari manual :
Jadi sesuatu seperti ini harus bekerja dengan sempurna (dengan parameter yang diteruskan dalam array asosiatif):
sumber
Jangan berikan string sama sekali!
Anda dapat meneruskan sebuah array dan membiarkan php / curl melakukan pekerjaan kotor encoding, dll.
sumber
http_build_query()
array yang sama)Menurut manual PHP, data yang diteruskan ke cURL sebagai string harus dienkode URL. Lihat halaman curl_setopt () dan cari
CURLOPT_POSTFIELDS
.sumber
Karena
CURLOPT_POSTFIELDS
, parameter dapat dikirimkan sebagai string yang di-urlencode sepertipara1=val1¶2=val2&..
atau sebagai array dengan nama bidang sebagai kunci dan data bidang sebagai nilaiCoba format berikut:
sumber
json_encode()
akan memberi Anda sesuatu yang sangat berbeda dari string parameter yang valid sebagaifirst=John&last=Smith
.json_encode()
akan menampilkan:{"first":"John","last":"Smith"}
yang kemudian akan menjadi badan mentah permintaan POST Anda.json_encode(...)
dohttp_build_query(...)
. Ini akan membuat "string berenkode url" yang diharapkan berisi parameter yang dipisahkan oleh "&".Satu perbedaan utama lainnya yang belum disebutkan di sini adalah
CURLOPT_POSTFIELDS
tidak dapat menangani array bersarang.Jika kita mengambil array bersarang
['a' => 1, 'b' => [2, 3, 4]]
maka ini harus diberi parameter sebagaia=1&b[]=2&b[]=3&b[]=4
([
dan]
akan / harus URL dikodekan). Ini akan diubah kembali secara otomatis menjadi array bersarang di ujung lain (dengan asumsi di sini ujung lainnya juga PHP).Ini akan berhasil:
Ini tidak akan berhasil:
Ini akan memberi Anda pemberitahuan. Eksekusi kode akan berlanjut dan titik akhir Anda akan menerima parameter
b
sebagai string"Array"
:sumber
Itu tergantung pada
content-type
url-encoded atau multipart / form-data
Untuk mengirim data dengan cara standar, seperti yang dilakukan browser dengan formulir, cukup berikan array asosiatif . Seperti yang dinyatakan oleh manual PHP:
Pengkodean JSON
Namun, saat berkomunikasi dengan JSON API, konten harus dikodekan JSON agar API dapat memahami data POST kami.
Dalam kasus seperti itu, konten harus dienkode secara eksplisit sebagai JSON:
Saat berkomunikasi di JSON, kami juga biasanya menyetel
accept
dan membericontent-type
header yang sesuai:sumber
untuk larik bersarang, Anda dapat menggunakan:
sumber
Menariknya, cara Postman melakukan POST adalah operasi GET lengkap dengan 2 opsi tambahan berikut:
Hanya dengan cara lain, dan itu bekerja dengan sangat baik.
sumber
Jawaban ini membutuhkan waktu lama untuk saya temukan juga. Saya menemukan bahwa yang harus Anda lakukan adalah menggabungkan URL ('?' Setelah nama file dan ekstensi) dengan string kueri yang dikodekan URL. Ini bahkan tidak terlihat seperti Anda harus menyetel opsi POST cURL. Lihat contoh palsu di bawah ini:
Anda juga bisa menggunakan
file_get_contents()
:sumber