Sebenarnya saya ingin membaca konten yang muncul setelah permintaan pencarian, ketika selesai. Masalahnya adalah bahwa URL hanya menerima POST
metode, dan tidak mengambil tindakan apa pun dengan GET
metode ...
Saya harus membaca semua konten dengan bantuan domdocument
atau file_get_contents()
. Apakah ada metode yang akan membiarkan saya mengirim parameter dengan POST
metode dan kemudian membaca isinya PHP
?
file_get_contents()
hanya jika pembungkus fopen telah diaktifkan. Lihat php.net/manual/en/…file_get_contents()
file_get_contents()
merupakan bagian dari inti PHP. Selain itu, menggunakan ekstensi yang tidak perlu dapat memperluas permukaan serangan aplikasi Anda. Misalnya Google php curl cveAnda bisa menggunakan CURL :
sumber
Saya menggunakan fungsi berikut untuk mengirim data menggunakan curl. $ data adalah array bidang untuk dikirim (akan dikodekan dengan benar menggunakan http_build_query). Data dikodekan menggunakan aplikasi / x-www-form-urlencoded.
@Edward menyebutkan bahwa http_build_query dapat dihilangkan karena curl akan mengkodekan array yang diteruskan dengan benar ke parameter CURLOPT_POSTFIELDS, tetapi disarankan bahwa dalam kasus ini data akan dikodekan menggunakan data multi-formulir / data.
Saya menggunakan fungsi ini dengan API yang mengharapkan data dikodekan menggunakan aplikasi / x-www-form-urlencoded. Itu sebabnya saya menggunakan http_build_query ().
sumber
http_build_query
mengubah$data
array menjadi string, menghindari output sebagai multipart / form-data.... CURLOPT_RETURNTRANSFER, true
menghasilkan konten yang$response
mengandungfile_get_contents
dan solusi Anda membutuhkan CURL yang tidak dimiliki banyak orang. jadi solusi Anda mungkin bekerja, tetapi tidak menjawab pertanyaan bagaimana melakukan ini dengan fungsi file bawaan / stream bawaan.Saya sarankan Anda untuk menggunakan guzzle paket open-source yang sepenuhnya unit diuji dan menggunakan praktik coding terbaru.
Menginstal Guzzle
Pergi ke baris perintah di folder proyek Anda dan ketik perintah berikut (dengan asumsi Anda sudah menginstal komposer manajer paket ). Jika Anda memerlukan bantuan cara menginstal Komposer, Anda harus melihatnya di sini .
Menggunakan Guzzle untuk mengirim permintaan POST
Penggunaan Guzzle sangat mudah karena menggunakan API berorientasi objek ringan:
sumber
Ada metode CURL lain jika Anda menuju ke sana.
Ini sangat mudah setelah Anda mengetahui bagaimana ekstensi PHP curl bekerja, menggabungkan berbagai flag dengan panggilan setopt (). Dalam contoh ini saya punya variabel $ xml yang berisi XML yang telah saya siapkan untuk kirim - saya akan memposting konten itu ke metode pengujian contoh.
Pertama kita menginisialisasi koneksi, lalu kita mengatur beberapa opsi menggunakan setopt (). Ini memberi tahu PHP bahwa kami sedang membuat permintaan posting, dan bahwa kami mengirim beberapa data dengannya, memasok data. Bendera CURLOPT_RETURNTRANSFER memberi tahu curl untuk memberi kami output sebagai nilai balik dari curl_exec daripada mengeluarkannya. Lalu kami melakukan panggilan dan menutup koneksi - hasilnya dalam $ response.
sumber
$ch
tidak boleh$curl
, benar?Jika Anda kebetulan menggunakan Wordpress untuk mengembangkan aplikasi Anda (itu sebenarnya cara yang mudah untuk mendapatkan otorisasi, halaman info dll bahkan untuk hal-hal yang sangat sederhana), Anda dapat menggunakan cuplikan berikut:
Ini menggunakan berbagai cara membuat permintaan HTTP yang sebenarnya, tergantung pada apa yang tersedia di server web. Untuk detail lebih lanjut, lihat dokumentasi API HTTP .
Jika Anda tidak ingin mengembangkan tema atau plugin khusus untuk memulai mesin Wordpress, Anda bisa melakukan hal berikut dalam file PHP yang terisolasi di root wordpress:
Itu tidak akan menampilkan tema atau menghasilkan HTML apa pun, cukup hapus dengan API Wordpress!
sumber
Saya ingin menambahkan beberapa pemikiran tentang jawaban berbasis ikal dari Fred Tanrikut. Saya tahu sebagian besar dari mereka sudah ditulis dalam jawaban di atas, tetapi saya pikir itu ide yang baik untuk menunjukkan jawaban yang mencakup semuanya.
Berikut ini adalah kelas yang saya tulis untuk membuat permintaan HTTP-GET / POST / PUT / DELETE berdasarkan curl, mengenai hampir semua tubuh respons:
Perbaikan
Contoh penggunaan
DAPATKAN
POS
TARUH
MENGHAPUS
Pengujian
Anda juga dapat membuat beberapa tes layanan keren dengan menggunakan kelas sederhana ini.
sumber
Alternatif lain dari metode curl-less di atas adalah menggunakan fungsi stream asli :
stream_context_create()
:stream_get_contents()
:Fungsi POST dengan ini bisa seperti ini:
sumber
fclose()
jika$fp
adafalse
. Karenafclose()
mengharapkan sumber daya adalah parameter.Cara pengiriman
GET
atauPOST
permintaan yang lebih baikPHP
adalah sebagai berikut:Kode diambil dari dokumentasi resmi di sini http://docs.php.net/manual/da/httprequest.send.php
sumber
Ada satu lagi yang bisa Anda gunakan
Klik disini untuk detail
sumber
Saya mencari masalah yang sama dan menemukan pendekatan yang lebih baik dalam melakukan ini. Jadi begini.
Anda cukup meletakkan baris berikut di halaman redirection (misalkan page1.php).
Saya membutuhkan ini untuk mengarahkan permintaan POST untuk panggilan API REST . Solusi ini dapat mengarahkan ulang dengan memposting data serta nilai header khusus.
Inilah tautan referensi .
sumber
redirect a page request with POST param
vssend POST request
. Bagi saya tujuan keduanya sama, koreksi saya jika saya salah.Di sini hanya menggunakan satu perintah tanpa CURL. Sangat sederhana.
sumber
Coba paket HTTP_Request2 PEAR untuk mengirim permintaan POST dengan mudah. Atau, Anda dapat menggunakan fungsi keriting PHP atau menggunakan konteks aliran PHP .
HTTP_Request2 juga memungkinkan mengejek server , sehingga Anda dapat menguji kode Anda dengan mudah
sumber