Saya ingin membuat permintaan GET sederhana ke skrip lain di server berbeda. Bagaimana saya melakukan ini?
Dalam satu kasus, saya hanya perlu meminta skrip eksternal tanpa memerlukan keluaran apa pun.
make_request('http://www.externalsite.com/script1.php?variable=45'); //example usage
Dalam kasus kedua, saya perlu mendapatkan keluaran teks.
$output = make_request('http://www.externalsite.com/script2.php?variable=45');
echo $output; //string output
Sejujurnya, saya tidak ingin main-main dengan CURL karena ini bukanlah tugas CURL. Saya juga tidak ingin menggunakan http_get karena saya tidak memiliki ekstensi PECL.
Apakah fsockopen akan berhasil? Jika ya, bagaimana cara melakukannya tanpa membaca konten file? Apakah tidak ada cara lain?
Terima kasih semuanya
Memperbarui
Saya harus menambahkan, dalam kasus pertama, saya tidak ingin menunggu skrip mengembalikan apa pun. Seperti yang saya pahami file_get_contents () akan menunggu halaman dimuat sepenuhnya dll?
sumber
Jawaban:
file_get_contents
akan melakukan apa yang kamu inginkanEdit: Salah satu cara untuk menjalankan permintaan GET dan segera kembali.
Dikutip dari http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html
Apa yang dilakukannya adalah membuka soket, mematikan permintaan get, dan segera menutup soket dan mengembalikannya.
sumber
curl_post_async
dan mendapatkan suara positif ...Ini adalah cara membuat jawaban Marquis berfungsi dengan permintaan POST dan GET:
sumber
ssl://hostname
bukan hanyahostname
.Mengenai pembaruan Anda, tentang tidak ingin menunggu halaman penuh dimuat - menurut saya
HEAD
permintaan HTTP adalah yang Anda cari ..get_headers harus melakukan ini - Saya pikir itu hanya meminta header, jadi tidak akan dikirimi konten halaman penuh.
"PHP / Curl: HEAD Request membutuhkan waktu lama di beberapa situs" menjelaskan cara melakukan
HEAD
permintaan menggunakan PHP / CurlJika Anda ingin memicu permintaan, dan tidak menahan skrip sama sekali, ada beberapa cara, dengan berbagai kerumitan ..
"wget -O /dev/null $carefully_escaped_url"
- ini akan menjadi platform khusus, dan Anda harus benar - benar berhati-hati dalam meng-escape parameter ke perintahsumber
Kamu tidak. Meskipun PHP menawarkan banyak cara untuk memanggil URL, PHP tidak menawarkan dukungan out of the box untuk melakukan segala jenis pemrosesan asinkron / berulir per siklus permintaan / eksekusi. Metode apa pun yang mengirim permintaan untuk URL (atau pernyataan SQL, atau dll.) Akan menunggu beberapa jenis respons. Anda akan membutuhkan semacam sistem sekunder yang berjalan di mesin lokal untuk mencapai ini (cari di google untuk "antrian pekerjaan php")
sumber
Saya akan merekomendasikan Anda perpustakaan PHP yang teruji dengan baik: curl-easy
sumber
Jika Anda menggunakan lingkungan Linux, Anda dapat menggunakan perintah exec PHP untuk menjalankan linux curl. Berikut adalah contoh kode, yang akan membuat postingan HTTP Asynchronous.
Kode ini tidak memerlukan libs PHP tambahan dan dapat menyelesaikan posting http dalam waktu kurang dari 10 milidetik.
sumber
sumber
getstatus()
atauwaitSend()
atauwaitResult()
. Dengan begitu, pemanggil bisa mendapatkan perilaku asinkron sepenuhnya dengan memanggil dalam satu putaran untuk memeriksa apakah ada hasil dan, jika tidak, melanjutkan ke tugas lain apa pun yang sedang berjalan. Hmm, sekarang saya ingin melakukan portTask
dari .net ke php…Masalah yang menarik. Saya menduga Anda hanya ingin memicu beberapa proses atau tindakan di server lain, tetapi tidak peduli apa hasilnya dan ingin skrip Anda melanjutkan. Mungkin ada sesuatu di cURL yang dapat membuat ini terjadi, tetapi Anda mungkin ingin mempertimbangkan
exec()
untuk menggunakan skrip lain di server yang melakukan panggilan jika cURL tidak dapat melakukannya. (Biasanya orang menginginkan hasil dari panggilan skrip jadi saya tidak yakin apakah PHP memiliki kemampuan untuk hanya memicu proses.) Denganexec()
Anda dapat menjalankanwget
atau bahkan skrip PHP lain yang membuat permintaan denganfile_get_conents()
.sumber
Anda sebaiknya mempertimbangkan menggunakan Antrean Pesan daripada metode yang disarankan. Saya yakin ini akan menjadi solusi yang lebih baik, meskipun membutuhkan lebih banyak pekerjaan daripada hanya mengirim permintaan.
sumber
biarkan saya menunjukkan jalan saya :)
membutuhkan nodejs yang diinstal di server
(server saya mengirim 1000 https mendapatkan permintaan hanya membutuhkan waktu 2 detik)
url.php:
urlscript.js>
sumber
Bagi saya pertanyaan tentang permintaan GET asinkron muncul karena saya bertemu dengan situasi ketika saya perlu melakukan ratusan permintaan , mendapatkan dan menangani data hasil pada setiap permintaan dan setiap permintaan membutuhkan milidetik yang signifikan dari eksekusi yang mengarah ke menit (!) total mengeksekusi dengan sederhana
file_get_contents
.Dalam hal ini, komentar w_haigh di php.net sangat membantu tentang fungsi http://php.net/manual/en/function.curl-multi-init.php
Jadi, inilah versi saya yang ditingkatkan dan dibersihkan untuk membuat banyak permintaan secara bersamaan. Untuk kasus saya, ini setara dengan cara "asynchronous". Mungkin itu membantu seseorang!
Sangat mudah untuk menulis ulang ini untuk menangani POST atau jenis permintaan HTTP (S) lain atau kombinasinya. Dan dukungan Cookie, pengalihan, http-auth, dll.
sumber
Mencoba:
Ini TIDAK akan berfungsi sebagai modul apache, Anda harus menggunakan CGI.
sumber
Saya menemukan tautan menarik ini untuk melakukan pemrosesan asinkron (mendapatkan permintaan).
askapache
Selanjutnya Anda dapat melakukan pemrosesan asinkron dengan menggunakan antrian pesan seperti misalnya beanstalkd.
sumber
Berikut adalah adaptasi dari jawaban yang diterima untuk melakukan permintaan GET sederhana.
Satu hal yang perlu diperhatikan jika server melakukan penulisan ulang url, ini tidak akan berfungsi. Anda harus menggunakan klien http berfitur lengkap.
sumber
Hanya sedikit koreksi pada skrip yang diposting di atas. Berikut ini bekerja untuk saya
sumber
Sepertinya tidak ada yang menyebutkan Guzzle , yang merupakan klien HTTP PHP yang memudahkan untuk mengirim permintaan HTTP. Itu bisa bekerja dengan atau tanpa
Curl
. Itu dapat mengirim permintaan sinkron dan asinkron.sumber
Berdasarkan utas ini saya membuat ini untuk proyek codeigniter saya. Ini bekerja dengan baik. Anda dapat memiliki fungsi apa pun yang diproses di latar belakang.
Pengontrol yang menerima panggilan async.
Dan perpustakaan yang melakukan panggilan asinkron
Metode ini bisa dipanggil untuk memproses model :: method () di 'background'. Ini menggunakan argumen variabel.
sumber
Saran: format halaman HTML FRAMESET yang berisi, katakanlah, 9 frame di dalamnya. Setiap frame akan MENDAPATKAN "contoh" yang berbeda dari halaman myapp.php Anda. Akan ada 9 utas berbeda yang berjalan di server Web, secara paralel.
sumber
Untuk PHP5.5 +, mpyw / co adalah solusi terbaik. Ia bekerja seolah-olah itu adalah tj / co dalam JavaScript.
Contoh
Asumsikan bahwa Anda ingin mengunduh beberapa avatar pengguna GitHub tertentu. Langkah-langkah berikut diperlukan untuk setiap pengguna.
<img class="avatar" src="...">
dan minta (DAPATKAN GAMBAR)---
: Menunggu tanggapan saya...
: Menunggu tanggapan lain secara paralelBanyak
curl_multi
skrip berbasis terkenal sudah memberi kita aliran berikut.Namun, ini tidak cukup efisien. Apakah Anda ingin mengurangi waktu tunggu yang tidak berguna
...
?Ya, sangat mudah dengan mpyw / co. Untuk lebih jelasnya, kunjungi halaman repositori.
sumber
Ini adalah fungsi PHP saya sendiri ketika saya melakukan POST ke URL tertentu dari halaman mana pun ....
Contoh: * penggunaan Fungsi saya ...
sumber
Coba kode ini ....
Harap jangan lupa untuk mengaktifkan ekstensi php CURL.
sumber
CURLOPT_TIMEOUT_MS
misalnya 100 milidetik, bukanCURLOPT_TIMEOUT
dalam hitungan detik dan memiliki waktu minimal 1 detik - untuk eksekusi lebih cepat.Ini berfungsi dengan baik untuk saya, sayangnya Anda tidak dapat mengambil respons dari permintaan Anda:
Ini bekerja sangat cepat, tidak perlu soket tcp mentah :)
sumber