Rumah > pembangunan bahagian belakang > tutorial php > PHP Master | Menggunakan curl untuk permintaan jauh

PHP Master | Menggunakan curl untuk permintaan jauh

William Shakespeare
Lepaskan: 2025-02-23 10:14:18
asal
502 orang telah melayarinya

3Jika anda seorang pengguna Linux maka anda mungkin menggunakan curl. Ia adalah alat yang berkuasa yang digunakan untuk segala -galanya daripada menghantar e -mel untuk memuat turun subtitle Little Pony yang terkini. Dalam artikel ini saya akan menerangkan cara menggunakan lanjutan curl dalam PHP. Pelanjutan ini menawarkan kami fungsi sebagai utiliti konsol di dunia PHP yang selesa. Saya akan membincangkan penghantaran permintaan GET dan pos, mengendalikan kuki log masuk, dan fungsi FTP. Sebelum kita mula, pastikan anda mempunyai lanjutan (dan Perpustakaan Libcurl) dipasang. Ia tidak dipasang secara lalai. Dalam kebanyakan kes, ia boleh dipasang menggunakan pengurus pakej sistem anda, tetapi sekatan bahawa anda boleh mendapatkan arahan dalam manual PHP.

Takeaways Key

  • curl, alat yang berkuasa yang digunakan untuk pelbagai tugas dari menghantar e -mel untuk memuat turun sari kata, boleh digunakan dalam PHP melalui lanjutan yang menawarkan fungsi yang sama seperti utiliti konsol.
  • Curl boleh digunakan untuk mendapatkan laman web, log masuk ke laman web, bekerjasama dengan FTP dan menghantar beberapa permintaan. Sebagai contoh, anda boleh mensimulasikan pembalakan ke laman web berkuasa WordPress dengan menghantar permintaan pos dengan butiran khusus.
  • Permintaan Curl Penyelesaian masalah dipermudahkan dengan penggunaan dua fungsi: curl_getinfo () dan curl_error (). Fungsi ini memberikan maklumat terperinci mengenai saluran dan sebarang kesilapan yang mungkin berlaku semasa permintaan.
  • Curl adalah alat yang cekap dan berkuasa untuk membuat panggilan jauh, menjadikannya sesuai untuk tugas -tugas seperti mengakses API luaran atau merangkak. Ia menawarkan antara muka mesra pengguna dan pelaksanaan permintaan yang agak mudah. ​​

bagaimana ia berfungsi?

Semua permintaan curl mengikuti corak asas yang sama:
  1. Pertama kita memulakan sumber curl (sering disingkat sebagai ch untuk "curl handle") dengan memanggil fungsi curl_init ().
  2. Seterusnya kami menetapkan pelbagai pilihan, seperti URL, kaedah permintaan, data muatan, dan lain -lain. Pilihan boleh ditetapkan secara individu dengan curl_setopt (), atau kami boleh lulus pelbagai pilihan untuk curl_setopt_array ().
  3. maka kami melaksanakan permintaan itu dengan menghubungi curl_exec ().
  4. Akhirnya, kami membebaskan sumber untuk membersihkan memori.
Oleh itu, kod boilerplate untuk membuat permintaan kelihatan seperti ini:
<span><span><?php
</span></span><span><span>// init the resource
</span></span><span><span>$ch = curl_init();
</span></span><span>
</span><span><span>// set a single option...
</span></span><span><span>curl_setopt($ch, OPTION, $value);
</span></span><span><span>// ... or an array of options
</span></span><span><span>curl_setopt_array($ch, array(
</span></span><span><span>OPTION1 => $value1,
</span></span><span><span>OPTION2 => $value2
</span></span><span><span>));
</span></span><span>
</span><span><span>// execute
</span></span><span><span>$output = curl_exec($ch);
</span></span><span>
</span><span><span>// free
</span></span><span><span>curl_close($ch);</span></span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Satu -satunya perkara yang berubah untuk permintaan ialah pilihan yang ditetapkan, yang tentu saja bergantung pada apa yang anda lakukan dengan Curl.

Dapatkan laman web

Contoh yang paling asas menggunakan curl yang boleh saya fikirkan hanyalah mengambil kandungan laman web. Oleh itu, mari kita ambil halaman utama BBC sebagai contoh.
<span><span><?php
</span></span><span><span>curl_setopt_array(
</span></span><span><span>$ch, array(
</span></span><span><span>CURLOPT_URL => 'http://www.bbc.co.uk/',
</span></span><span><span>CURLOPT_RETURNTRANSFER => true
</span></span><span><span>));
</span></span><span>
</span><span><span>$output = curl_exec($ch);
</span></span><span><span>echo $output;</span></span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Semak output dalam penyemak imbas anda dan anda harus melihat laman web BBC dipaparkan. Kami bernasib baik kerana laman web ini memaparkan dengan betul kerana menghubungkan mutlaknya ke stylesheets dan imej. Pilihan yang kami gunakan adalah:
  • curlopt_url - Menentukan URL untuk permintaan
  • curlopt_returnTransfer - Apabila ditetapkan palsu, curl_exec () mengembalikan benar atau palsu bergantung kepada kejayaan permintaan itu. Apabila ditetapkan kepada benar, curl_exec () mengembalikan kandungan respons.

log masuk ke laman web

Curl melaksanakan permintaan GET untuk mengambil halaman BBC, tetapi Curl juga boleh menggunakan kaedah lain, seperti POST dan PUT. Untuk contoh ini, mari mensimulasikan log masuk ke laman web berkuasa WordPress. Pembalakan masuk dilakukan dengan menghantar permintaan pos ke http://example.com/wp-login.php dengan butiran berikut:
  • Login - Nama Pengguna
  • pwd - kata laluan
  • redirect_to - URL yang kita mahu pergi ke selepas pembalakan
  • testcookie - harus ditetapkan kepada 1 (ini hanya untuk WordPress)
Sudah tentu parameter ini khusus untuk setiap tapak. Anda harus sentiasa menyemak nama input untuk diri sendiri, sesuatu yang dapat dilakukan dengan mudah dengan melihat sumber halaman HTML dalam penyemak imbas anda.
<span><span><?php
</span></span><span><span>// init the resource
</span></span><span><span>$ch = curl_init();
</span></span><span>
</span><span><span>// set a single option...
</span></span><span><span>curl_setopt($ch, OPTION, $value);
</span></span><span><span>// ... or an array of options
</span></span><span><span>curl_setopt_array($ch, array(
</span></span><span><span>OPTION1 => $value1,
</span></span><span><span>OPTION2 => $value2
</span></span><span><span>));
</span></span><span>
</span><span><span>// execute
</span></span><span><span>$output = curl_exec($ch);
</span></span><span>
</span><span><span>// free
</span></span><span><span>curl_close($ch);</span></span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Pilihan baru adalah:
  • curlopt_post - tetapkan ini benar jika anda ingin menghantar permintaan pos
  • curlopt_postfields - data yang akan dihantar dalam badan permintaan
  • curlopt_followlocation - Jika ditetapkan benar, curl akan mengikuti pengalihan
Eh oh! Jika anda menguji perkara di atas tetapi anda akan melihat mesej ralat: "Ralat: Kuki disekat atau tidak disokong oleh penyemak imbas anda. Anda mesti membolehkan kuki menggunakan WordPress. " Ini adalah perkara biasa, kerana kita perlu mempunyai kuki yang didayakan untuk sesi berfungsi. Kami melakukan ini dengan menambah dua lagi pilihan.
<span><span><?php
</span></span><span><span>curl_setopt_array(
</span></span><span><span>$ch, array(
</span></span><span><span>CURLOPT_URL => 'http://www.bbc.co.uk/',
</span></span><span><span>CURLOPT_RETURNTRANSFER => true
</span></span><span><span>));
</span></span><span>
</span><span><span>$output = curl_exec($ch);
</span></span><span><span>echo $output;</span></span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Pilihan baru adalah:
  • curlopt_cookiesession - Jika ditetapkan kepada benar, Curl akan memulakan sesi kuki baru dan mengabaikan mana -mana kuki sebelumnya
  • curlopt_cookiejar - Ini adalah nama fail di mana curl harus menyimpan maklumat cookie. Pastikan anda mempunyai kebenaran yang betul untuk menulis ke fail!
Sekarang kita dilog masuk, kita hanya perlu merujuk fail cookie untuk permintaan berikutnya.

Bekerja dengan FTP

Menggunakan curl untuk memuat turun dan memuat naik fail melalui FTP juga mudah. Mari lihat memuat turun fail:
<span><span><?php
</span></span><span><span>$postData = array(
</span></span><span><span>'login' => 'acogneau',
</span></span><span><span>'pwd' => 'secretpassword',
</span></span><span><span>'redirect_to' => 'http://example.com',
</span></span><span><span>'testcookie' => '1'
</span></span><span><span>);
</span></span><span>
</span><span><span>curl_setopt_array($ch, array(
</span></span><span><span>CURLOPT_URL => 'http://example.com/wp-login.php',
</span></span><span><span>CURLOPT_RETURNTRANSFER => true,
</span></span><span><span>CURLOPT_POST => true,
</span></span><span><span>CURLOPT_POSTFIELDS => $postData,
</span></span><span><span>CURLOPT_FOLLOWLOCATION => true
</span></span><span><span>));
</span></span><span>
</span><span><span>$output = curl_exec($ch);
</span></span><span><span>echo $output;</span></span>
Salin selepas log masuk
Perhatikan bahawa tidak banyak pelayan FTP awam yang membolehkan muat naik dan muat turun tanpa nama untuk alasan keselamatan, jadi URL dan kelayakan di atas hanya pemegang tempat. Ini hampir sama dengan menghantar permintaan HTTP, tetapi hanya beberapa perbezaan kecil:
  • curlopt_url - URL fail, perhatikan penggunaan "ftp: //" dan bukannya "http: //"
  • curlot_userpwd - kelayakan log masuk untuk pelayan FTP
Memuat naik fail melalui FTP sedikit lebih kompleks, tetapi masih dapat dikendalikan. Nampaknya ini:
<span><span><?php
</span></span><span><span>curl_setopt_array($ch, array(
</span></span><span><span>CURLOPT_URL => 'http://example.com/wp-login.php',
</span></span><span><span>CURLOPT_RETURNTRANSFER => true,
</span></span><span><span>CURLOPT_POST => true,
</span></span><span><span>CURLOPT_POSTFIELDS => $postData,
</span></span><span><span>CURLOPT_FOLLOWLOCATION => true,
</span></span><span><span>CURLOPT_COOKIESESSION => true,
</span></span><span><span>CUROPT_COOKIEJAR => 'cookie.txt'
</span></span><span><span>));</span></span>
Salin selepas log masuk
Pilihan penting di sini adalah:
  • curlopt_upload - Boolean jelas
  • curlopt_infile - aliran yang boleh dibaca untuk fail yang kami mahu muat naik
  • curlopt_infilesize - saiz fail yang kami mahu muat naik di bait

Menghantar pelbagai permintaan

Bayangkan kita perlu melakukan lima permintaan untuk mengambil semua data yang diperlukan. Perlu diingat bahawa beberapa perkara akan berada di luar kawalan kami, seperti latensi rangkaian dan kelajuan tindak balas pelayan sasaran. Harus jelas bahawa mana -mana kelewatan apabila mengeluarkan lima panggilan berturut -turut boleh ditambah! Salah satu cara untuk mengurangkan masalah ini ialah mengeluarkan permintaan secara tidak segerak. Teknik asynchronous lebih biasa dalam komuniti JavaScript dan Node.js, tetapi secara ringkas dan bukannya menunggu tugas yang memakan masa untuk diselesaikan, kami memberikan tugas kepada benang atau proses yang berbeza dan terus melakukan perkara-perkara lain dalam masa yang sama. Apabila tugas selesai, kami kembali untuk hasilnya. Yang penting ialah kita tidak membazirkan masa menunggu keputusan; Kami menghabiskannya melaksanakan kod lain secara bebas. Pendekatan untuk melakukan pelbagai permintaan curl asynchronous sedikit berbeza dari sebelumnya. Kami memulakan perkara yang sama - kami memulakan setiap saluran dan kemudian menetapkan pilihan - tetapi kemudian kami memulakan multihandler menggunakan curl_multi_init () dan menambah saluran kami dengan curl_multi_add_handle (). Kami melaksanakan pengendali dengan melingkari mereka dan memeriksa status mereka. Pada akhirnya kita mendapat kandungan respons dengan curl_multi_getContent ().
<span><span><?php
</span></span><span><span>// init the resource
</span></span><span><span>$ch = curl_init();
</span></span><span>
</span><span><span>// set a single option...
</span></span><span><span>curl_setopt($ch, OPTION, $value);
</span></span><span><span>// ... or an array of options
</span></span><span><span>curl_setopt_array($ch, array(
</span></span><span><span>OPTION1 => $value1,
</span></span><span><span>OPTION2 => $value2
</span></span><span><span>));
</span></span><span>
</span><span><span>// execute
</span></span><span><span>$output = curl_exec($ch);
</span></span><span>
</span><span><span>// free
</span></span><span><span>curl_close($ch);</span></span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Kod di atas mengambil kira -kira 1,100 ms untuk melaksanakan pada komputer riba saya. Melaksanakan permintaan secara berurutan tanpa antara muka multi yang diperlukan sekitar 2,000 ms. Bayangkan apa keuntungan anda jika anda menghantar beratus -ratus permintaan! Pelbagai projek wujud yang abstrak dan membungkus antara muka pelbagai. Membincangkannya adalah di luar skop artikel, tetapi jika anda merancang untuk mengeluarkan pelbagai permintaan secara tidak segerak maka saya cadangkan anda melihat mereka:
  • github.com/petewarden/parallelcurl
  • semlabs.co.uk/journal/object-oriented-curl-class-with-multi-threading

Penyelesaian masalah

Jika anda menggunakan curl maka anda mungkin melakukan permintaan anda ke pelayan pihak ketiga. Anda tidak dapat mengawalnya dan banyak yang boleh salah: Pelayan boleh pergi di luar talian, struktur direktori boleh berubah, dan lain -lain. Kami memerlukan cara yang cekap untuk mengetahui apa yang salah apabila sesuatu tidak berfungsi, dan bernasib baik Curl menawarkan dua fungsi untuk ini: curl_getInfo () dan curl_error () . curl_getInfo () mengembalikan array dengan semua maklumat mengenai saluran, jadi jika anda ingin menyemak sama ada semuanya baik -baik saja anda boleh gunakan:
<span><span><?php
</span></span><span><span>// init the resource
</span></span><span><span>$ch = curl_init();
</span></span><span>
</span><span><span>// set a single option...
</span></span><span><span>curl_setopt($ch, OPTION, $value);
</span></span><span><span>// ... or an array of options
</span></span><span><span>curl_setopt_array($ch, array(
</span></span><span><span>OPTION1 => $value1,
</span></span><span><span>OPTION2 => $value2
</span></span><span><span>));
</span></span><span>
</span><span><span>// execute
</span></span><span><span>$output = curl_exec($ch);
</span></span><span>
</span><span><span>// free
</span></span><span><span>curl_close($ch);</span></span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Jika ralat muncul, anda boleh menyemaknya dengan curl_error ():
<span><span><?php
</span></span><span><span>curl_setopt_array(
</span></span><span><span>$ch, array(
</span></span><span><span>CURLOPT_URL => 'http://www.bbc.co.uk/',
</span></span><span><span>CURLOPT_RETURNTRANSFER => true
</span></span><span><span>));
</span></span><span>
</span><span><span>$output = curl_exec($ch);
</span></span><span><span>echo $output;</span></span>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kesimpulan

Curl menawarkan cara yang kuat dan cekap untuk membuat panggilan terpencil, jadi jika anda memerlukan crawler atau sesuatu untuk mengakses API luaran, Curl adalah alat yang hebat untuk pekerjaan itu. Ia memberikan kita antara muka yang bagus dan cara yang agak mudah untuk melaksanakan permintaan. Untuk maklumat lanjut, lihat manual PHP dan laman web Curl. Jumpa lagi lain! Komen mengenai artikel ini ditutup. Ada soalan mengenai PHP? Mengapa tidak bertanya di forum kami? imej melalui Fotolia

Soalan Lazim (Soalan Lazim) Mengenai Menggunakan Curl Untuk Permintaan Jauh

Apa itu curl dan mengapa ia digunakan dalam php?

curl, atau URL klien, adalah perpustakaan yang membolehkan anda membuat permintaan HTTP dalam PHP. Ia digunakan untuk berkomunikasi dengan pelbagai jenis pelayan dan memuat turun atau memuat naik data. Curl menyokong pelbagai protokol seperti HTTP, HTTPS, FTP, dan banyak lagi. Ini alat yang berkuasa yang boleh digunakan untuk berinteraksi dengan API, mengikis laman web, atau memuat turun fail.

Bagaimana saya memasang dan mengaktifkan curl dalam php? pelayan web. Walau bagaimanapun, jika ia tidak didayakan, anda boleh melakukannya dengan mengubah suai fail php.ini anda. Cari garis yang mengatakan "; lanjutan = curl" dan keluarkan titik koma. Jika garis tidak wujud, anda boleh menambahkannya pada akhir fail. Setelah membuat perubahan, simpan fail dan mulakan semula pelayan web anda.

Bagaimana saya membuat permintaan curl mudah di php?

fungsi curl_init (). Kemudian, tetapkan pilihan anda menggunakan fungsi curl_setopt (). Akhirnya, laksanakan permintaan dengan curl_exec () dan tutup sesi dengan curl_close (). Berikut adalah contoh asas:

$ ch = curl_init ();
curl_setopt ($ ch, curlopt_url, "http://example.com"); );
$ output = curl_exec ($ ch);
curl_close ($ ch);

Bagaimana saya boleh mengendalikan kesilapan dalam curl? ) fungsi. Fungsi ini mengembalikan nombor ralat dan mesej ralat terakhir masing -masing. Berikut adalah contoh:

if (curl_errno ($ ch)) {

echo 'error:'. curl_error ($ ch); }

Bagaimana saya menghantar permintaan pos menggunakan curl?

Untuk menghantar permintaan pos, anda perlu menetapkan pilihan curlopt_post kepada Benar dan pilihan curlopt_postfields ke pelbagai data yang anda mahu hantar. Berikut adalah contoh:


curl_setopt ($ ch, curlopt_post, 1);
curl_setopt ($ ch, curlopt_postfields, "postvar1 = value1 & postvar2 = value2"); tajuk untuk permintaan curl?
Anda boleh menetapkan tajuk tersuai dengan menggunakan Pilihan curlopt_httpheader. Pilihan ini mengambil pelbagai tajuk sebagai nilainya. Berikut adalah contoh:

headers = array (

'content-type: application/json',

'kebenaran: pembawa'. $ Token
); CH, curlopt_httpheader, headers $);

Bagaimana saya mengikuti pengalihan dengan curl?

untuk mengikuti Pengalihan, anda perlu menetapkan pilihan curlopt_follocation untuk benar. Berikut adalah cara anda boleh melakukannya:

curl_setopt ($ ch, curlopt_followlocation, true);

bagaimana saya boleh mendapatkan tajuk tindak balas dari permintaan curl? Header Response, anda boleh menetapkan pilihan curlopt_header untuk benar. Ini termasuk tajuk dalam output. Berikut adalah contoh:


curl_setopt ($ ch, curlopt_header, true);

Bagaimana saya menghantar fail menggunakan curl? CURLOPT_POSTFIELDS Pilihan dan awalan laluan fail dengan simbol @. Berikut adalah contoh:

curl_setopt ($ ch, curlopt_postfields, array ('file' => '@/path/to/file.txt'); Proksi?


Untuk menggunakan curl dengan proksi, anda boleh menetapkan pilihan curlopt_proxy ke alamat proksi. Begini cara anda boleh melakukannya:

curl_setopt ($ ch, curlopt_proxy, "http://proxy.example.com:8080");

Atas ialah kandungan terperinci PHP Master | Menggunakan curl untuk permintaan jauh. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan