Cara menggunakan curl encoding php

Curl akan membantu mengelola data yang diposting di web. Artikel ini berkaitan dengan alat curl gratis, yang dengannya Anda dapat mengirimkan dan menerima halaman web dari baris perintah. Terima kasih untuk curl, mudah untuk mengotomatisasi banyak

Curl akan membantu mengelola data yang diposting di Web

Artikel ini membahas alat curl gratis yang dapat Anda kirimkan dan terima halaman web dari baris perintah. Berkat Curl, mudah untuk mengotomatisasi banyak operasi perlindungan informasi dan administrasi, seperti mempelajari halaman web untuk analisis atau mengunggah perbaikan untuk sistem keamanan dari web.

Menginstal Curl.

Curl adalah bagian dari banyak distribusi UNIX. Ada file biner dan teks sumber untuk sebagian besar sistem operasi lainnya. Bahkan programmer yang bekerja dengan phps terbuka dapat menggunakan Curl untuk mengamankan konten web langsung dari skenario PHP.

Untuk bekerja Curl dengan Secure Sockets Layer Web Nodes (SSL) memerlukan paket OpenSSL. Ada dua versi Curl: satu dengan SSL, yang lain tanpa SSL. Saya sarankan terlebih dahulu karena SSL dengan aman melindungi data.

Sebelum menggunakan ikal dengan fungsi SSL, Anda harus mengunggah dari jaringan dan menginstal paket OpenSSL secara terpisah. Binary OpenSSL untuk file Windows dapat diunduh dari situs proyek SourceForge GNUWIN32 ke alamat. Situs ini memiliki banyak alat berguna lainnya di Windows.

Anda harus mengunduh dan menginstal paket OpenSSL, lalu salin file dua DLL ke direktori system32:

Salin "C: Program FilesGnuwin32 Binlibeay32.dll"% Windir% System32 Copy "C: Program FilesGnuWin32 BinlibsSL32.dll"% Windir% System32

Setelah itu, Anda dapat menginstal CURL. File biner Curl SSL yang kompatibel untuk Windows dapat ditemukan di http://curl.haxx.se/lateest.cgi?curl\u003dwin32-ssl-sspi. . Versi terbaru, Curl 7.15.0, terletak di Win32-Sl-Spi.zip, yang berisi file dan dokumentasi Curl.exe.

Setelah menginstal Curl, Anda harus memastikan kinerjanya dengan memasukkan perintah

Curl http://isc.sans.org/ infocon.txt.

Jika sebuah kata menunjukkan warna (misalnya, hijau) muncul di layar, itu berarti bahwa Curl berfungsi. Dalam contoh sederhana ini, Curl mengekstrak konten Infocon dari pusat Storm Internet Institut Sans. Hijau berarti bahwa fungsi-fungsi Internet secara normal dan ancaman serius tidak terdeteksi. Jika, bukannya hijau, kata-kata kuning, oranye atau merah muncul di layar, kemudian menunda artikel ini dan mengunjungi situs. http://isc.sans.org. Untuk mempelajari tentang status peningkatan bahaya di Internet. Dalam hal kesalahan, perlu untuk memverifikasi pemasangan ikal.

Intinya, Curl mengambil halaman web, dan kemudian mengeluarkan halaman Halaman HTML Sumber pada konsol. Namun, kemampuan utilitas lebih luas. Curl memiliki fungsi pemeriksaan kesalahan tertanam. Misalnya, tim

Curl http: // noserverhere

memberi kesalahan Curl: (6) tidak dapat menyelesaikan host: noserverhere; Host tidak ditemukan. Kode kesalahan dapat digunakan dalam skrip untuk memeriksa ketersediaan halaman web atau respons server web. Misalnya, jika Anda menggunakan Curl untuk penghapusan harian halaman web, khususnya statistik Web-node harian, Anda dapat menambah skenario dengan teks sumber yang mencari kode kesalahan. Jika Curl menampilkan kode kesalahan ikal: (7) tidak dapat terhubung ke host, Anda dapat segera mentransfer peringatan atau mengirim pesan email.

Menghapus data terenkripsi

Salah satu keuntungan paling penting dari Curl kompatibel dengan SSL. Halaman HTTPS yang diminta ditransmisikan melalui jaringan dalam formulir terenkripsi, dan kemudian Curl menampilkan teks yang dipulihkan. Selain itu, Curl memeriksa sertifikat - tanggal penyelesaian sertifikat, kepatuhan dengan nama komputer host dari nama host dalam sertifikat dan tingkat kepercayaan pada sertifikat root - dan memperingatkan jika sertifikat tidak benar. Parameter -Cacert memungkinkan Anda menentukan file sertifikat tertentu. Sertifikat pengecekan dibatalkan menggunakan parameter -k. Pendekatan alternatif adalah menggunakan parameter -insecure.

Tidak hanya untuk www

Kemampuan Curl lebih lebar dari transfer file sederhana melalui Internet. Dengan Curl, Anda dapat dengan cepat mendapatkan daftar direktori situs FTP:

Curl ftp: // myftpsite

Untuk melihat subdirektori situs, Anda harus memasukkan perintah

CURL FTP: // myftpsite / subdir /

Untuk mengunduh file dari jaringan, cukup untuk menentukan nama file di URL. Dalam contoh berikut, file bernama readme.txt dimuat langsung dari baris perintah dan ditampilkan di layar:

Curl ftp: //ftp.microsoft.com/ DeskApps / Games / readme.txt

Seringkali lebih mudah untuk menyiapkan skrip dengan Curl untuk memasukkan file FTP daripada menggunakan perintah FTP secara interaktif.

Secara default, data ditampilkan langsung ke konsol, tetapi mereka dapat diarahkan ke file menggunakan parameter -O -O dan -O. Untuk mendapatkan halaman dan menyimpannya pada disk, Anda harus menentukan parameter -o. Parameter -O menyimpan halaman yang diterima dalam file lokal, dan Curl mengambil nama dokumen jarak jauh. Jika nama file tidak ditentukan dalam URL, maka operasi ini akan gagal. Jika Anda menggunakan CURL untuk mengirim permintaan ke node web tanpa nama file, tetapi Anda perlu menyimpan hasil dalam file, Anda dapat menentukan nama file pada prompt perintah, misalnya:

Autentikasi

Curl menyediakan metode otentikasi dasar, padest, dan terintegrasi. Sebagian besar situs akses ke halaman dengan otentikasi berbasis formulir dapat diperoleh dengan menggunakan fungsi pengiriman Curl, yang akan ditampilkan tepat di bawah ini. Ini berarti bahwa Anda dapat mentransfer formulir ini, khususnya nama pengguna dan kata sandi, di situs web jarak jauh, di halaman web yang ditampilkan dalam input informasi. Untuk mengirim kredensial, Anda dapat menggunakan parameter -U parameter atau memasukkannya ke dalam URL, yang secara tradisional dilakukan di FTP, misalnya:

Curl FTP: // Nama Pengguna: [Dilindungi Email]

Menggunakan penerimaan curl yang dipinjam dari FTP, Anda dapat mentransfer ke HTTP, seperti pada contoh berikut:

Curl http: // nama pengguna: password @ myhtmlsite / default.htm

Curl juga menyediakan akses ke halaman web melalui server proxy. Oleh karena itu, Curl dapat dikonfigurasi untuk menggunakan server proxy untuk mengautentikasi dalam mode dasar, intisari dan NTLM.

Baca dokumentasi

Dalam satu artikel, sulit untuk mencakup semua fungsi ikal, di antaranya dan mengunduh file ke server (-t), dan hanya melihat informasi di header HTTP (-i), dan melihat semua data dalam mode terperinci (- V), dan output tersembunyi (-s). Saya sarankan untuk berkenalan lebih detail dengan fungsi ikal dalam manual yang diterbitkan di alamat http://curl.haxx.se/docs. .

Contoh menggunakan curl

Setelah membaca dasar-dasar Curl, pertimbangkan contoh sederhana untuk mengekstraksi data dari situs web dengan data input yang ditentukan. Kami akan membangun alat whois sederhana, yang menunjukkan kesederhanaan dan kemudahan penggunaan Curl dan prosedur untuk mengirim data ke situs web menggunakan parameter -d. Dalam contoh ini, Curl mengirim alamat IP ke arin whois web-node, dan kemudian mengambil hasil dari situs ini. WHOIS sedang mencari informasi tentang pemilik alamat IP.

Sebelum memulai pekerjaan, penting untuk menjelajahi node web, karena dalam teks sumber setiap situs ada fitur, dan curl tidak selalu berfungsi dengan situs apa pun. Pra-kunjungan ke situs memungkinkan Anda untuk mengumpulkan informasi yang diperlukan untuk Curl. Dalam contoh ini, saya menggunakan browser untuk mengunjungi node web http://www.arin.net/whois/ Dan perhatikan bahwa situs tersebut memiliki satu-satunya bidang entri data di mana pengunjung menentukan alamat IP mereka. Perlu untuk mendapatkan detail bidang ini, yang merupakan bagian dari formulir web. Dalam contoh ini, skrip Perl formfind.pl digunakan ( http://cool.haxx.se/cvs.cgi/curl/perl/contrib/ formfind? rev \u003d head & content-type \u003d text / vnd.viewcvs-markup). Skrip formfind.pl mengkonversi data formulir ke hasil output yang nyaman dan menyederhanakan pencarian data manual ke HTML. Tentu saja, untuk meluncurkan formin di komputer harus dikerahkan Perl. Paket Win32 Perl yang baik Anda dapat memesan pada ActiveState ActivePerl di alamat http://www.activestate.com. .

Pertimbangkan contoh lebih detail. Pertama, lihat node web yang berisi formulir yang meminta informasi:

Curl -o whoisoutputfile http://www.arin.net/whois/

Perintah ini mengekstrak halaman WHOIS dari http://www.arin.net dan menyimpannya di file teks WhoisOutputFile, yang berisi teks sumber HTML yang direproduksi oleh browser saat mengunjungi situs.

Maka Anda perlu menemukan dan menyoroti formulir ini:

./formfind.pl.

Variabel masalah formin dan nilai-nilai mereka yang mungkin. Dalam contoh ini, hasil output agak sederhana (lihat layar 1.).

Anda harus memperhatikan data formulir input bernama QueryInput. Ini adalah bidang teks di mana Curl harus mengirim alamat IP yang diinginkan. Alamat IP tertentu tidak masalah - dalam contoh ini, Microsoft digunakan. Menggunakan parameter -d, alamat IP yang diinginkan dikirim ke bidang kueriput:

Curl -d "queryinput \u003d 207.46.133.140" http://ws.arin.net/cgibin/ whois.pl

Perintah Curl dengan parameter -d menemukan data dalam formulir, dalam hal ini queryinput, yang mewakili alamat IP yang diinginkan. Dalam hal ini, alamat target berubah; Formulir harus mengirimkan data ke URL baru, yang mewakili skrip whois.pl. Alamat target baru dapat dilihat pada output formlfind pada layar 1.

Dalam contoh ini, kode sumber respons WHOIS juga diperoleh, tetapi disembunyikan oleh grup tag HTML. Secara default, pesan status Curl menunjukkan ukuran dokumen, persentase eksekusi dan kecepatan pengiriman. Output dapat dibersihkan sedikit dan menyaring nama organisasi tempat alamat IP. Status Curl dapat diblokir menggunakan parameter -s. Perintah harus dieksekusi melalui grep untuk hanya mendapatkan orgname:

Curl -s -d "queryinput \u003d 207.46.133.140" http://ws.arin.net/cgibin/ whois.pl | Grep orgname.

Dalam contoh ini, hasil output menunjukkan bahwa Orgname - Microsoft Corp.

@echo off curl -k -s -d "queryinput \u003d% 1" http://ws.arin.net/cgibin/ whois.pl | Grep orgname.

Pada artikel ini, kita akan berbicara tentang alat yang kuat seperti Curl, serta tentang pustaka PHP, yang menyediakan akses ke alat ini - Libcurl. Mengapa itu semua diperlukan? Untuk berkomunikasi dengan server menggunakan protokol transfer data, misalnya, HTTP atau FTP. Protokol yang tersisa tidak terlalu menarik bagi kami jika seseorang ingin mempelajari topik ini, maka Anda harus menggali sumber daya bahasa Inggris, dan dalam artikel ini akan ada fondasi dan contoh penggunaan.

Apa itu ikal dan libcurl? Total momen

Jadi, perpustakaan Libcurl memberi kami kemampuan untuk mentransfer data ke server, dan menerima jawaban darinya. Apa yang memberi kita ini? Kemampuan untuk meniru perilaku pengguna atau! Anda dapat menerima isi halaman untuk parsing selanjutnya, Anda bisa mendapatkan header dari respons layanan dan diotorisasi secara terprogram di situs, membuat posting pesan skrip (misalnya, di Twitter atau di forum) atau informasi. Semuanya terbatas pada fantasi Anda!

Menginstal Curl di Denwer (Denver). Bagaimana cara mulai menggunakan Libcurl?

Hal pertama yang harus kita lakukan adalah menginstal perpustakaan. Di komputer lokal, saya menggunakan Rakitan Denwer, serta sebagian besar webmaster pemula, di mana artikel tersebut dihitung. Pengguna berpengalaman yang secara mandiri memasang bundel PHP + Apache + MySQL akan dapat menginstal kedua ikal, jangan jelaskan kepada mereka seperti yang dilakukan;) dan kami, pendatang baru, gunakan solusi yang sudah jadi lebih mudah. Oleh karena itu, kami menginstal Libcurl sebagai berikut:

  • Unduh paket ekstensi jadi "php5: modul tambahan".
  • Sesuai, atur. Tidak ada yang sulit, setuju :)
  • Buka di notepad (saya selalu merekomendasikan notepad ++) File: x: /webservers/usr/local/php5/php.ini // Di mana x - disk Anda diinstal

    dan lepaskan titik dengan koma di awal:

    ; ekstensi \u003d php_curl.dll

  • Kami membuat server restart Denver.

Siap. Untuk memeriksa kinerja perpustakaan, Anda dapat menghubungi fungsi phpinfo () dan menemukan garis di sana: dukungan curl diaktifkan. Selamat atas kemenangan pertama.

Deskripsi Curl dan Langkah Pertama

Untuk awal bekerja dengan alat, itu harus diinisialisasi. Ini dilakukan sebagai berikut:

$ ch \u003d curl_init ();

Kami menggunakan fitur inisialisasi sesi ikal. Pada saat yang sama, Anda dapat segera mengatur URL, seperti ini:

$ ch \u003d curl_init ("https: // situs");

Dan Anda dapat melakukannya nanti, dalam opsi. Prosedur untuk menginstal opsi tidak masalah. Ini dilakukan dengan fungsi lain:

Curl_Setopt (Sumber Daya CH, Opsi String, Nilai Campuran)

Parameter pertama dari fungsi ini, yaitu, sumber daya ch, kita telah membuat sedikit lebih tinggi, tetapi opsi opsi dan nilai banyak. Saya pikir Anda tidak boleh menyalinnya di sini segalanya, tetapi cukup berikan tautan ke deskripsi terperinci tentang fungsi, saya harap tidak ada yang akan tersinggung: curl_setopt.

Saya akan memberikan contoh menginstal opsi hanya pada contoh URL:

$ URL \u003d "https: // situs"; Curl_setopt ($ ch, curlopt_url, $ url);

Lebih dari beberapa opsi untuk mengatur opsi: Mari kita dapatkan header respons server, jangan sampai halaman itu sendiri:

Curl_setopt ($ ch, curlopt_header, 1); // baca header curl_setopt ($ ch, curlopt_nobody, 1); // baca hanya header tanpa tubuh

Jadi, kami menginisialisasi sesi, mengatur parameter yang kami butuhkan, sekarang melakukan permintaan yang dihasilkan, tutup sesi dan mendapatkan hasilnya:

$ Hasil \u003d curl_exec ($ CH); Curl_close ($ ch); Echo $ hasil;

Akibatnya, kami mendapatkan contoh kerja penuh pertama kami menggunakan perpustakaan Libcurl:

$ ch \u003d curl_init (); $ URL \u003d "https: // situs"; Curl_setopt ($ ch, curlopt_url, $ url); curl_setopt ($ ch, curlopt_header, 1); // baca header curl_setopt ($ ch, curlopt_nobody, 1); // baca hanya header tanpa $ Hasil \u003d curl_exec ($ CH); Curl_close ($ ch); Echo $ hasil;

Cara kerjanya, saya harap, jelas, karena kami melihat setiap langkah secara terpisah :) Sebagai hasilnya, kami mendapatkan header respons HTTP dari server, yang tepat di bawah ini Anda pasti akan mengerti, untuk lebih memahami semua tahapan Interaksi browser dan server:

HTTP / 1.1 200 OK Server: nginx / 1.2..php 1

Mundur! Kami menerima header respons dari server dan menguji perpustakaan dalam aksi. Apa yang berguna bagi kita? Fakta bahwa sekarang Anda tentang membayangkan urutan tindakan saat bekerja dengan Curl:

  • Inisialisasi sesi (curl_init)
  • Tetapkan opsi yang kita butuhkan (curl_setopt)
  • Jalankan permintaan (curl_exec)
  • Sesi lengkap (curl_close)

Struktur header query http

Misalnya, saya menoleh ke halaman Ya.ru dan melihat permintaan browser yang terbentuk dan jawaban yang diterima dari server. Di sini mereka:
Penyelidikan
Dapatkan / http / 1.1 - Kami mencoba untuk mendapatkan halaman ke alamat /, yaitu, yang utama di root folder. Gunakan protokol versi 1.1.
Agen pengguna: Opera / 9.80 (Windows NT 6.1; WOW64) Presto / 2.12.388 Versi / 12.14 - Kami melihat server, kami adalah browser opera.
Tuan rumah: Ya.ru - Nama domain dari sumber yang diminta.
Terima: teks / html, aplikasi / xml; q \u003d 0,9, aplikasi / xhtml + xml, gambar / png, gambar / webp, gambar / jpeg, gambar / gif, gambar / x-xbitmap, * / *; q \u003d 0.1 - Daftar format sumber daya yang diizinkan.
Terima-Bahasa: ru-ru, ru; q \u003d 0,9, en; q \u003d 0,8 - Daftar bahasa yang didukung.
Menerima-encoding: gzip, deflate - Metode pengkodean yang didukung.
Cookie: Yandexuid \u003d xxxxx - cookie, jika perlu.
Koneksi: Keep-Alive - Tolong jangan merusak koneksi dan tetap berhubungan.
Menjawab
Http / 1.1 200 ok - kami mendapat respons dengan kode 200, maka semuanya baik-baik saja.
Server: Nginx - server memperkenalkan dirinya - ini adalah nginx.
Tanggal: Sun, 10 Mar 2013 14:10:50 GMT - Tanggal dan waktu saat ini di server.
Jenis konten: teks / html; Charset \u003d UTF-8 - Jenis konten dan pengodean.
Koneksi: Tutup - server tidak ingin mendukung koneksi konstan dengan kami, sehingga segera menutupnya. Koneksi baru akan diinstal untuk kueri berikutnya.
Cache-Control: no-cache, no-store, max-era \u003d 0, harus-revalidate - Manajemen caching. Dalam hal ini, dinonaktifkan.
Kedaluwarsa: Sun, 10 Mar 2013 14:10:50 GMT - Tanggal dugaan berakhirnya sesi. Dalam kasus kami, ia bertepatan dengan waktu pembukaan, karena server segera menutupnya, segera setelah pemrosesan.
Terakhir dimodifikasi: Sun, 10 Mar 2013 14:10:50 GMT - Waktu modifikasi terakhir.
Konten-encoding: GZIP adalah cara untuk mengkodekan informasi.
Daftar lengkap semua parameter yang dapat ditemukan di header query HTTP dapat dilihat di Wikipedia.
Sekarang Anda berpikir tentang bagaimana browser dan server web Anda berkomunikasi satu sama lain. Ini sangat membantu untuk mengetahui dan mengerti, karena kami akan mencoba meniru tindakan browser menggunakan perpustakaan Libcurl. Lanjutkan.

Contoh bekerja dengan perpustakaan

Saya percaya bahwa setelah beberapa momen umum sudah jelas dan semuanya tampak jelas, maka saatnya untuk pergi berlatih dan pada contoh sudah mengejar keterampilan Anda. Secara pribadi, saya selalu memiliki tangan segera untuk mencoba semuanya dalam praktik :)

Karena Curl sangat baik untuk parser, maka pertimbangkan fungsi untuk mendapatkan kode halaman di alamatnya. Pada saat yang sama, kami memperoleh array di output, konten halaman dan bahkan kode kesalahan, jika terjadi kesalahan.

Fungsi get_web_page ($ URL) ($ uagent \u003d "opera / 9.80 (Windows NT 6.1; WOW64) Presto / 2.12.388 versi / 12.14"; $ ch \u003d curl_init ($ URL); curl_setopt ($ ch, curlopt_returntransfer, 1); // mengembalikan halaman web curl_setopt ($ ch, curlopt_header, 0); // tidak mengembalikan header curl_setopt ($ ch, curlopt_follocation, 1); // lulus oleh redirect of curl_setopt ($ CH, Curlopt_encoding, "") ; // proses semua encoding curl_setopt ($ ch, curlopt_usageent, $ uagent); // usergent curl_setopt ($ ch, curlopt_connecttimeout, 120); // curl_setopt koneksi timeout ($ ch, curlopt_timeout, 120); // curl_setopt response timeout ( $ Ch, curlopt_maxredir 10); // berhenti setelah 10th redirect $ konten \u003d curl_exec ($ ch); $ err \u003d curl_errno ($ ch); $ errmsg \u003d curl_error ($ ch); $ header \u003d $ CH); curl_close ($ ch); $ header ["errno"] \u003d $ err; $ header ["errmsg"] \u003d $ errmsg; $ header ["konten"] \u003d $ Konten; $ header;

Parameter input:
uRL - alamat halaman atau situs.
Nilai parameter output (array dengan tiga elemen):
header ['errno'] - Jika ada yang salah, maka akan ada kode kesalahan.
header ['ERMMSG'] - di sini akan menjadi teks kesalahan.
header ['konten'] - sebenarnya halaman \\ file \\ gambar, dll.

Gunakan fungsi, misalnya, sebagai berikut:

$ result \u003d get_web_page ("https://ya.ru"); Jika (($ hasil ["errno"]! \u003d 0) || ($ Hasil ["http_code"]! \u003d 200)) (echo $ Hasil ["errmsg"];) Lainnya ($ Hasil [" "]; Echo $ halaman;)

Semuanya harus lulus tanpa kesalahan dan Anda akan menerima kode halaman ke variabel $ Halaman. Jika Anda mencoba untuk mendapatkan halaman yang tidak ada dari Yaaaaaaaaaaaaaaa.ru, kami akan mendapat kesalahan:

Tidak bisa menyelesaikan host: Yaaaaaaaaaa.ru; Host tidak ditemukan

Semuanya diproses dengan benar dan indah :)
Selanjutnya, dengan kode halaman, Anda dapat melakukan apa saja, misalnya, untuk menuangkan secara teratur. Tapi itu semua dalam pelajaran berikut, tetapi untuk saat ini kita akan berhenti pada ini.

curl adalah alat yang memungkinkan Anda berinteraksi dengan berbagai server dan mendukung banyak protokol: http, ftp, telnet, dll. Awalnya, Curl adalah program layanan untuk baris perintah. Tetapi, untungnya bagi kami, PHP mendukung pekerjaan dengan perpustakaan Curl. Pada artikel ini, kami akan mempertimbangkan contoh-contoh non-sepele bekerja dengan Curl.

Kenapa Curl?

Bahkan, ada banyak cara lain untuk mengirim permintaan ke server lain ke, misalnya, mendapatkan konten halaman. Banyak, sebagian besar karena kemalasan, gunakan fitur PHP sederhana, bukannya curl:

$ konten \u003d file_get_contents ("http://www.example.com"); // atau $ lines \u003d file ("http://www.example.com"); // atau readFile ("http://www.example.com");

Namun, mereka tidak memungkinkan untuk secara efektif memproses kesalahan. Ada juga sejumlah tugas yang tidak mereka sama sekali - misalnya, bekerja dengan cookie, otorisasi, permintaan pos, unduh file.

curl adalah alat yang ampuh yang mendukung banyak protokol dan memberikan permintaan lengkap untuk permintaan.

Curl Dasar-dasar

Sebelum melanjutkan ke contoh kompleks, pertimbangkan struktur dasar dari kueri curl di PHP. Untuk melakukan kueri curl dalam PHP, 4 langkah utama harus dilakukan:

  1. Inisialisasi.
  2. Mengatur opsi.
  3. Komunikasi.
  4. Sumber daya pembersih.
// 1. Inisialisasi $ CH \u003d curl_init (); // 2. Instal opsi, termasuk URL curl_setopt ($ ch, curlopt_url, "http://www.google.com"); curl_setopt ($ ch, curlopt_returntransfer, 1); Curl_setopt ($ ch, curlopt_header, 0); // 3. Lakukan permintaan dan menerima jawaban $ output \u003d curl_exec ($ CH); // 4. Membersihkan sumber daya curl_close ($ CH);

Pada dasarnya, dalam artikel ini, kita akan mempertimbangkan langkah nomor 2, karena ajaib utama terjadi di sana. Daftar opsi curl sangat besar, jadi kami tidak akan mempertimbangkan semua opsi hari ini, tetapi kami menggunakan yang akan cocok untuk menyelesaikan tugas-tugas tertentu.

Pelacakan kesalahan

Jika perlu, Anda dapat menambahkan baris berikut untuk melacak kesalahan:

// ... $ output \u003d curl_exec ($ ch); Jika ($ output \u003d\u003d\u003d salah) (echo "Keriting kesalahan:". curl_error ($ CH);) // ...

Harap perhatikan bahwa kami menggunakan "\u003d\u003d\u003d" bukannya "\u003d\u003d", karena Perlu untuk membedakan respons kosong server dari nilai palsu boolean, yang mengembalikan jika terjadi kesalahan.

Terima Informasi Permintaan

Langkah opsional lainnya adalah memperoleh informasi tentang kueri curl, setelah eksekusi.

// ... curl_exec ($ ch); $ info \u003d curl_getinfo ($ ch); Echo "mengambil". $ info ["Total_time"]. "Detik untuk URL". $ info ["URL"]; // ...

Akibatnya, Anda akan menerima array dengan informasi berikut:

  • "URL"
  • "JENIS KONTEN"
  • "Http_code"
  • Header_size.
  • "Permintaan_size"
  • "Filetime"
  • "Ssl_verify_result"
  • "Redirect_count"
  • "Total_time"
  • "Namelookup_time"
  • "Connect_time"
  • "Pretransfer_time"
  • "Size_upload"
  • "Ukuran_download"
  • "Speed_download"
  • "Speed_upload"
  • "Download_content_length"
  • "Upload_content_length"
  • Starttransfer_time.
  • "Redirect_time"

Melacak redirect, tergantung pada browser

Dalam contoh ini, kami akan menulis skrip yang akan mendefinisikan redirect tergantung pada pengaturan peramban yang berbeda. Misalnya, beberapa situs mengarahkan pengunjung dari perangkat seluler, pengunjung dari negara lain.

Kami akan menggunakan opsi curlopt_httpheader untuk menginstal header kami sendiri, termasuk agen pengguna dan bahasa dan melihat di mana situs dialihkan.

// url $ urls \u003d array ("http://www.cnn.com", "http://www.mozilla.com", "http://www.facebook.com"); // browser $ browser \u003d array ("standar" \u003d\u003e array ("user_agent" \u003d\u003e "mozilla / 5.0 (windows; u; windows nt 6.1; en-us; rv: 1.9.1.6) Gecko / 20091201 Firefox / 3.5 6 (.NET CLR 3.5.30729) "," Bahasa "\u003d\u003e" En-Us, En; Q \u003d 0,5 ")," iPhone "\u003d\u003e Array (" user_agent "\u003d\u003e" Mozilla / 5.0 (iPhone; CPU Seperti Mac OS X; En) AppleWebKit / 420 + (Khtml, seperti Gecko) Versi / 3.0 Mobile / 1A537A Safari / 419.3 "," bahasa "\u003d\u003e" English "\u003d\u003e Array (" User_Agent "\u003d\u003e (" "Mozilla / 4.0 (kompatibel; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)", "bahasa" \u003d\u003e "fr, fr-fr; q \u003d 0,5")); Foreach ($ url sebagai $ url) (echo "url: $ url \\ n"; foreach ($ browser sebagai $ test_name \u003d\u003e $ browser) ($ ch \u003d curl_init (); // atur alamat curl_setopt ($ ch, curlopt_url) , $ Url); // titik browser bekas dan curl_setopt ($ ch, curlopt_httpheader, array ("agen pengguna: ($ browser [" user_agent "])", "menerima-bahasa: ($ browser"]) ")); // konten halaman kita tidak perlu curl_setopt ($ ch, curlopt_nobody, 1); // hanya header curl_setopt ($ ch, curlopt_header, 1) diperlukan; // mengembalikan hasilnya, alih-alih kesimpulan Curl_Setopt ($ Ch, curlopt_returntransfer, 1); $ output \u003d curl_exec ($ ch); curl_close ($ ch); // tentukan redirect di header HTTP? If (preg_match ("! Lokasi: (. *)!" , $ Korek api)) (echo "$ test_name: redirect menjadi $ pertandingan \\ n";) elset (echo "$ test_name: tidak ada redirection \\ n";)) echo "\\ n \\ n";)

Dalam siklus, periksa browser untuk setiap ulla. Pertama, kami menetapkan opsi untuk permintaan kami: URL dan peramban tes dan bahasa.

Karena Kami telah menginstal opsi khusus, hasil eksekusi kueri hanya berisi headlines HTTP. Menggunakan ekspresi reguler sederhana, kita dapat memeriksa apakah jawabannya berisi garis "Lokasi:".

Hasil dari skrip:

URL: http://www.cnn.com Standar: Redirect ke http://edition.cnn.com/ iPhone: Redirect ke http://edition.cnn.com/ french: Redirects ke http: //edition.cnn .com / url: http://www.mozilla.com Standar: Redirect ke https://www.mozilla.org/firefox/ iPhone: Redirects ke https://www.mozilla.org/firefox/ Prancis: Redirects ke https://www.mozilla.org/firefox/ URL: http://www.facebook.com Standar: Redirects ke https://www.facebook.com/ iPhone: Redirects ke http://m.facebook.com /?Refsrc\u003dHTTTP%3A%2F%2Fwww.facebook.com%2F&_rdr French: No Redirection

Kami mengirim permintaan pos

Saat mengeksekusi permintaan, data dapat ditransmisikan dalam string kueri. Misalnya, ketika Anda mencari Google, permintaan Anda ditransmisikan ke URL:

Http://www.google.com/search?q\u003dgoogle.

Untuk mendapatkan hasil dari permintaan ini, Anda bahkan tidak perlu ikal, Anda bisa malas dan menggunakan "file_get_contents ()".

Tetapi beberapa formulir HTML menggunakan metode posting. Dalam hal ini, data dikirim pada badan pesan kueri, bukan di URL itu sendiri.

Kami akan menulis skrip yang akan mengirim permintaan POST. Untuk memulainya, membuat file PHP sederhana yang akan menerima permintaan ini dan mengembalikan data yang dikirimkan. Ayo sebut itu post_output.php:

$ URL \u003d "http: //localhost/post_output.php"; $ post_data \u003d array ("foo" \u003d\u003e "bar", "query" \u003d\u003e "foobar", "tindakan" \u003d\u003e "kirim"); $ ch \u003d curl_init (); Curl_setopt ($ ch, curlopt_url, $ url); curl_setopt ($ ch, curlopt_returntransfer, 1); // buat pasca permintaan curl_setopt ($ ch, curlopt_post, 1); // tambahkan data curl_setopt ($ ch, curlopt_postfields, $ post_data); $ Output \u003d curl_exec ($ CH); Curl_close ($ ch); Echo $ output;

Script ini akan menghapus:

Array (\u003d\u003e bilah \u003d\u003e foobar \u003d\u003e kirim)

Script ini mengirim Posting Permintaan ke file Post_Output.php. Yang membawa isi array $ _post dan kami mendapat jawaban ini menggunakan Curl.

Memuat file

Seperti pada contoh sebelumnya, buat file yang akan menerima permintaan, upload_output.php:

Print_r ($ _ file);

Dan skrip itu sendiri, mengunduh file:

$ URL \u003d "http: //localhost/upload_output.php"; $ post_data \u003d array ("foo" \u003d\u003e "bilah", // file untuk diunduh "unggah" \u003d\u003e "@ / tmp / desert.jpg"); $ ch \u003d 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, $ post_data); $ Output \u003d curl_exec ($ CH); Curl_close ($ ch); Echo $ output;

Jika Anda ingin mengunduh file, semua yang Anda butuhkan adalah mentransfer path ke sana, serta permintaan pos parameter biasa, menempatkan di awal "@". Hasil karya skrip:

Array (\u003d\u003e array (\u003d\u003e desert.jpg \u003d\u003e aplikasi / oktet-stream \u003d\u003e / tmp / phpahevxy \u003d\u003e 0 \u003d\u003e 845941))

Multi Curl.

Salah satu kemampuan canggih curl dalam PHP adalah kemampuan untuk melakukan beberapa permintaan secara bersamaan dan tidak sinkron.

Dalam kondisi normal, skrip berhenti dan menunggu eksekusi kueri. Dan jika Anda perlu melakukan banyak permintaan, itu bisa memakan waktu lama, karena Anda akan tampil secara konsisten. Pembatasan ini dapat dielakkan:

// Buat Handler $ CH1 \u003d curl_init (); $ CH2 \u003d curl_init (); // instal opsi curl_setopt ($ CH1, CURLOPT_URL, "http://lxr.php.net/"); Curl_setopt ($ CH1, CURLOPT_HEADER, 0); Curl_setopt ($ CH2, CURLOPT_URL, "http://www.php.net/"); Curl_setopt ($ CH2, CURLOPT_HEADER, 0); // buat beberapa pegangan curl $ MH \u003d curl_multi_init (); // tambahkan curl_multi_add_handle handler ($ MH, $ CH1); curl_multi_add_handle ($ MH, $ CH2); $ Running \u003d null; // lakukan permintaan DO (curl_multi_exec ($ mh, $ running);) sementara ($ running\u003e 0); // Gratis Sumber Daya Curl_Multi_Remove_Handle ($ MH, $ CH1); curl_multi_remove_handle ($ MH, $ CH2); Curl_multi_close ($ MH);

Idenya adalah Anda dapat membuat banyak deskriptor curl, menggabungkannya di bawah satu multi-deskriptor dan melakukan mereka secara asinkron.

Pertama, semuanya seperti dengan query curl biasa - deskriptor dibuat ( curl_init () ), Tetapkan parameter ( curl_setopt () ). Berikutnya menciptakan multi-deskriptor ( curl_multi_init () ) dan sebelumnya menciptakan deskriptor konvensional ditambahkan ( curl_multi_add_handle () ). Bukannya curl_exec biasa () kita akan mengulangi curl_multi_exec () Fitur ini memberi tahu kami tentang jumlah koneksi aktif menggunakan parameter kedua - $ berjalan. Oleh karena itu, siklus bekerja sedangkan $ berlari tidak akan sama dengan 0. Dan, tentu saja, setelah akhir kerja, perlu untuk bebas sumber daya.

Dalam contoh ini, kami cukup menampilkan hasil permintaan dalam stdout. Pertimbangkan kasus non-sepele menggunakan multi curl.

Verifikasi tautan eksternal di WordPress

Bayangkan sebuah blog dengan banyak posting yang berisi tautan ke situs eksternal. Beberapa tautan ini mungkin bukan pekerja.

Kami akan menulis skrip yang akan menemukan semua tautan yang tidak berfungsi dan akan menunjukkan kepada kami.

Untuk memulai, kita perlu mengeluarkan semua tautan eksternal dari database:

// config $ db_host \u003d "localhost"; $ db_user \u003d "root"; $ db_pass \u003d ""; $ db_name \u003d "wordpress"; $ Excluded_domains \u003d array ("localhost", "situs"); $ Max_connections \u003d 10; $ url_list \u003d array (); $ working_urls \u003d array (); $ dead_urls \u003d array (); $ noto_found_urls \u003d array (); $ Active \u003d null; // terhubung dengan mysql jika (! Mysql_connect ($ db_host, $ db_user, $ db_pass)) (mati ("tidak dapat menghubungkan:" mysql_error ()));) jika (! Mysql_select_db ($ db_name)) (mati ("tidak bisa Pilih DB: ". MySQL_ERROR ());) // Kami mengambil semua posting dengan tautan dalam teks $ q \u003d" Pilih post_content dari wp_posts di mana post_content seperti "% href \u003d%" dan post_type \u003d "post_type \u003d" "; $ R \u003d mysql_query ($ q) atau mati (mysql_error ()); Sementara ($ D \u003d mysql_fetch_assoc ($ R)) (// Kumpulkan semua tautan menggunakan IF Reguler ("preg_match_all (" / href \u003d \\ "(." $ d ("post_content"], $ pertandingan )) (Foreach ($ cocok dengan $ URL) (// filter domain yang tidak perlu $ tmp \u003d parse_url ($ url); jika (isset ($ tmp ["host"]) && in_array ($ tmp [host "], $ excluded_domains)) (melanjutkan;) // kumpulkan bersama $ url_list \u003d $ url;)) // hapus pengulangan $ URL_LIST \u003d array_value ($ url_list); Jika (! $ url_list) (mati ("tidak ada URL untuk memeriksa");)

Di bagian skrip ini, kami hanya menarik semua tautan eksternal dari database. Periksa mereka:

$ MH \u003d curl_multi_init (); // 1. Tambahkan referensi untuk ($ I \u003d 0; $ I< $max_connections; $i++) { add_url_to_multi_handle($mh, $url_list); } // основной цикл do { curl_multi_exec($mh, $curRunning); // 2. один из потоков завершил работу if ($curRunning != $running) { $mhinfo = curl_multi_info_read($mh); if (is_array($mhinfo) && ($ch = $mhinfo["handle"])) { // 3. один из запросов выполнен, можно получить информацию о нем $info = curl_getinfo($ch); // 4. нерабочая ссылка if (!$info["http_code"]) { $dead_urls = $info["url"]; // 5. 404? } else if ($info["http_code"] == 404) { $not_found_urls = $info["url"]; // 6. верная ссылка } else { $working_urls = $info["url"]; } // 7. удаляем отработавший дескриптор curl_multi_remove_handle($mh, $mhinfo["handle"]); curl_close($mhinfo["handle"]); // 8. добавим новый урл add_url_to_multi_handle($mh, $url_list); $running = $curRunning; } } } while ($curRunning > 0); Curl_multi_close ($ MH); Echo "\u003d\u003d URL mati \u003d\u003d \\ n"; Echo improde ("\\ n", $ dead_urls). "\\ n \\ n"; echo "\u003d\u003d 404 url \u200b\u200b\u003d\u003d \\ n"; Echo Implode ("\\ n", $ not_found_urls). "\\ n \\ n"; echo "\u003d\u003d URL kerja \u003d\u003d \\ n"; echo improde ("\\ n", $ working_urls); Echo "\\ n \\ n"; // 9. Menambahkan deskriptor dengan fungsi URL yang ditentukan, add_rl_to_multi_handle ($ MH, $ url_list) (Static $ index \u003d 0; // Jika ada tautan jika (isset ($ url_list [$ indeks])) (// semua sebagai Biasa $ ch \u003d curl_init (); // atur opsi curl_setopt ($ ch, curlopt_url, $ url_list [$ indeks]); // kembali, dan jangan menampilkan hasil curl_setopt ($ ch, curlopt_returntransfer, 1); // Izinkan pengalihan Curl_Setopt ($ ch, curlopt_followlocation, 1); // Kami hanya menerima header untuk menyimpan curl_setopt ($ ch, curlopt_nobody, 1); // Tambahkan ke multi-deskriptor curl_multi_add_handle ($ MH, $ CH); $ MH, $ CH); $ +;))

Pertimbangkan kode lebih (penomoran mematuhi komentar dalam kode):

  1. Tambahkan jumlah awal deskriptor untuk tidak membebani sistem dengan stream. Jumlah tersebut diatur oleh variabel $ MAX_Connections.
  2. Dalam variabel $ Currunning, jumlah aliran kerja disimpan dalam $ Running - nilai sebelumnya jika tidak sama, maka salah satu utas menyelesaikan pekerjaan.
  3. Kami menerima informasi tentang kueri yang dilakukan.
  4. Jika tidak ada respons server, tautannya tidak berfungsi.
  5. Respons Server - 404.
  6. Kalau tidak, tautan berfungsi.
  7. Permintaan dibuat, sumber daya gratis.
  8. Tambahkan UL baru ke deskriptor multi.
  9. Fungsi add_url_to_multi_handle () Menambahkan pegangan baru dengan ullasi yang diberikan ke multi-deskriptor.

Mulai skrip:

Mati URL \u003d\u003d xlexle1234.com/ \u003d\u003d 404 url \u200b\u200b\u003d\u003d www.google.com/dsfasdfafd \u003d\u003d URL kerja \u003d\u003d ru.php.net/manual/ru/function.time.php www.cssbuttongenatorator.com/ csslint. net / codex.wordpress.org/plugin_api/action_reference fortawesome.github.io/font-awesome/ fortawesome.github.io/font-awesome/ www.oractur.com/technetwork/java/javafx/dml kodeks wordpress.org/plugin_api/filter_reference codex.wordpress.org/roles_and_capabilities code.google.com/p/google-aphi-php-client/wiki/oauth2#google_apis_console jplayer.org/poogle-api -Php-client / developers.google.com/+/ ajaif.google.com/servicelogin?service\u003ddevconsole&passive\u003d1209600&continue\u003dhttpps%3a%2f%2fcode.google.com%2FAPIS%2F&follesSole%3A02F % 2fcode.google.com% 2fapis% 2fconsole% 2f daneden.github.io/anime.css/ github.com/daneden/animate.css ru2.php.net.Phunction.php. Com / recaptcha / API / verifikasi phpunit.de/ phpunit.de/manual/current/en/phpunit-book.html

Periksa memakan waktu sekitar 2 detik. Menjalankan secara bersamaan pada 10 aliran kinerja meningkat 10 kali, dibandingkan dengan permintaan curl konvensional. Untuk mendapatkan konten respons server menggunakan fungsi curl_multi_getcontent ($ ch) Di mana $ CH - deskriptor berasal dari curl_multi_info_read () .

Fitur ikal lainnya di PHP

Otentikasi HTTP.

Jika permintaan HTTP memerlukan otentikasi, gunakan kode berikut:

$ URL \u003d "http://www.someesit.com/members/"; $ ch \u003d curl_init (); Curl_setopt ($ ch, curlopt_url, $ url); curl_setopt ($ ch, curlopt_returntransfer, 1); // kirim nama curl_setopt dan kata sandi ($ ch, curlopt_userpwd, "myusername: mypassword"); // Jika Anda mengaktifkan pengalihan curl_setopt ($ ch, curlopt_follocation, 1); // curl akan mengirim kata sandi dan setelah pengawasan curl_setopt ($ ch, curlopt_unrestrictle_auth, 1); $ Output \u003d curl_exec ($ CH); Curl_close ($ ch);

Memuat pada FTP.

PHP memiliki perpustakaan sendiri untuk bekerja dengan FTP, tetapi Curl dapat digunakan:

// Kami membaca file $ \u003d file fopen ("/ path / to / file", "r"); // URL sudah berisi data yang diperlukan $ URL \u003d "ftp: // nama pengguna: [Dilindungi Email]: 21 / path / to / new / file "; $ ch \u003d curl_init (); curl_setopt ($ ch, curlopt_url); curl_setopt ($ ch, curlopt_returntransfer, 1); // Curl_Setopt Options ($ CH, Curlopt_Upload, 1); curl_setopt ($ ch, curlopt_infile, $ fp); curl_setopt ($ ch, curlopt_infilesize, filesize ("/ to / file"))); curl_setopt ($ ch, curlopt_ftpasci); curl_exec ($ Ch); curl_close ($ ch);

Gunakan proxy

Permintaan dapat dilakukan melalui proxy tertentu:

$ ch \u003d curl_init (); Curl_setopt ($ ch, curlopt_url, "http://www.example.com"); curl_setopt ($ ch, curlopt_returntransfer, 1); // alamat proxy curl_setopt ($ ch, curlopt_proxy, "11/11/11/8080"); // Jika otorisasi curl_setopt diperlukan ($ ch, curlopt_proxyuserpwd, "user: pass"); $ Output \u003d curl_exec ($ CH); Curl_close ($ ch);

Fungsi panggilan balik

Ada kesempatan untuk menggunakan pembungkus selama pelaksanaan kueri, tanpa menunggu penyelesaiannya. Misalnya, sementara respons server dimuat, kita dapat menggunakan data yang sudah diterima tanpa menunggu pemuatan penuh.

$ ch \u003d curl_init (); Curl_setopt ($ ch, curlopt_url, "http://example.com"); curl_setopt ($ ch, curlopt_writefunction, "progress_function"); Curl_exec ($ ch); Curl_close ($ ch); Fungsi Progress_Fungsi ($ CH, $ STR) (ECHO $ \u200b\u200bSTR; Kembali Strlen ($ str);)

KOLEKES Fungsi harus mengembalikan panjang string untuk bekerja dengan benar.

Setiap kali bagian selanjutnya dari respons server diterima, kolom akan disebabkan.

Kesimpulan

Pada artikel ini, kami melihat kemampuan curl canggih di PHP. Lain kali Anda perlu melakukan permintaan URL - gunakan CURL.

Kehidupan pengembang web dibayangi oleh kesulitan. Ini terutama tidak menyenangkan ketika sumber kesulitan-kesulitan ini tidak diketahui. Apakah ini masalah dengan mengirim permintaan, atau dengan jawabannya, atau dengan perpustakaan pihak ketiga, apakah API eksternal bermasalah? Ada banyak serangan yang mampu menyederhanakan hidup kita. Berikut adalah beberapa alat baris perintah yang saya anggap sangat berharga.

keriting
curl adalah program transfer data pada berbagai protokol yang mirip dengan wget. Perbedaan utama adalah bahwa secara default wget menyimpan ke file, dan ikal menampilkan ke baris perintah. Jadi Anda bisa menonton konten situs web. Misalnya, ini adalah cara untuk cepat mendapatkan IP eksternal Anda saat ini:

$ Curl ifconfig.me 93.96.141.93
Parameter -SAYA. (tunjukkan berita utama) dan -SAYA. (Tampilkan hanya tajuk utama) Make Curl alat yang sangat baik untuk men-debug respons HTTP dan analisis tentang apa yang dikirimkan server secara khusus:

$ Curl -i habrahabr.ru http / 1.1 200 ok server: nginx Tanggal: Kam, 18 Agu 2011 14:15:36 GMT Jenis konten: teks / html; Charset \u003d Koneksi UTF-8: Keep-Alive Keep-Alive: Timeout \u003d 25
Parameter -L. Juga berguna, itu menyebabkan Curl untuk secara otomatis mengikuti redirect. Curl mendukung otentikasi HTTP, cookie, tunneling melalui proxy http, pengaturan manual dalam berita utama dan banyak lagi.

Pengepungan
Siege - Alat untuk pengujian beban. Plus, ia memiliki pilihan yang nyaman. -G.yang sangat mirip dengan curl -il.Tapi, selain itu, Anda juga menunjukkan header permintaan HTTP. Berikut ini adalah contoh dari google.com (beberapa berita utama dilepas pendek):

$ Siege -g www.google.com Dapatkan / http / 1.1 host: www.google.com agen pengguna: joedog / 1.00 (x11; i; Siege 2.70) Koneksi: tutup http / 1.1 302 Ditemukan Lokasi: http: // www.google.co.uk/ tipe konten: teks / html; Charset \u003d UTF-8 Server: Panjang Konten GWS: 221 Koneksi: Tutup Get / Http / 1.1 Host: agen pengguna www.google.co.uk: Joedog / 1.00 (X11; i; SIEGE 2.70) Koneksi: Tutup HTTP / 1.1 200 tipe konten ok: teks / html; Charset \u003d ISO-8859-1 X-XSS-Protection: 1; Mode \u003d Koneksi Blok: Tutup
Tetapi untuk pengepungan yang benar-benar hebat cocok, jadi untuk pengujian beban. Seperti Benchmark Apachevsky. abdiDia dapat mengirim berbagai permintaan paralel ke situs dan melihat bagaimana ia mengatasi lalu lintas. Dalam contoh berikut, ditunjukkan bagaimana kami menguji Google menggunakan 20 permintaan selama 30 detik, setelah itu hasilnya diturunkan:

$ Siege -C20 www.google.co.uk -b -t30s ... Mengangkat Pengepungan Server ... Selesai. Transaksi: 1400 hits Ketersediaan: 100.00% berlalu waktu: 29.22 Secs Data ditransfer: 13.32 MB Waktu respons: 0,41 detik Tingkat transaksi: 47.91 Trans / detik Throughput: 0,46 MB / Sec Concurrency: 19.53 Sukses transaksi: 0 transaksi terpanjang: 4.08 Transaksi terpendek: 0,08
Salah satu fungsi pengepungan yang paling berguna adalah bahwa ia dapat bekerja tidak hanya dengan satu alamat, tetapi juga dengan daftar URL dari file. Ini bagus untuk pengujian beban, karena Anda dapat mensimulasikan lalu lintas nyata di situs, dan tidak hanya untuk menekan URL yang sama lagi dan lagi. Misalnya, inilah cara menggunakan pengepungan untuk memuat server menggunakan alamat dari log Apache Anda:

$ cut -d "" -f7 /var/log/apache2/access.log\u003e Urls.txt $ Siege -C-B -f urls.txt.
Ngrep.
Untuk analisis lalu lintas yang serius, ada Wireshark dengan ribuan pengaturan, filter, dan konfigurasi. Ada juga versi baris perintah tshark.. Tetapi untuk tugas-tugas sederhana, fungsionalitas Wireshark yang saya anggap berlebihan. Jadi selama saya tidak membutuhkan senjata yang kuat, saya gunakan. Itu memungkinkan Anda untuk melakukan dengan paket jaringan hal yang sama dengan grep. Membuat dengan file.

Untuk lalu lintas web, Anda hampir selalu ingin menggunakan parameter -W.Untuk menghemat pemformatan string serta parameter -Q.yang menyembunyikan informasi berlebihan tentang paket yang tidak cocok. Berikut adalah contoh perintah yang mencegat semua paket dengan perintah GET atau POST:

Ngrep -q -w byline "^ (dapatkan | posting). *"
Anda dapat menambahkan filter opsional untuk paket, misalnya, pada host yang diberikan, alamat IP atau port. Berikut ini adalah filter untuk semua lalu lintas masuk dan keluar di google.com, port 80, yang berisi kata "pencarian".

Ngrep -q -w byline "pencarian" host www.google.com dan port 80

Artikel ini menyarankan Anda mengetahui dasar-dasar jaringan dan bahasa HTML.

Kemampuan untuk menulis skrip sangat penting ketika membangun sistem komputer yang baik. Pergunaan kemampuan Unix-Systems menggunakan skrip shell dan berbagai program yang melakukan tim otomatis adalah salah satu alasan mengapa mereka memiliki kesuksesan seperti itu.

Meningkatnya jumlah aplikasi yang masuk ke web menyebabkan fakta bahwa tema skrip HTTP menjadi semakin populer. Tugas-tugas penting di bidang ini adalah ekstraksi otomatis informasi dari Internet, mengirim atau mengunduh data ke server web, dll.

Curl - alat baris perintah yang memungkinkan Anda melakukan manipulasi URL dan transmisi berbagai macam. Artikel ini difokuskan pada menciptakan permintaan HTTP sederhana. Diasumsikan bahwa Anda sudah tahu di mana harus merekrut

# Curl --help.

# Curl --manual.

untuk informasi tentang Curl.

Curl bukan alat yang akan melakukan segalanya untuk Anda. Ini menciptakan permintaan, menerima data dan mengirim data. Anda mungkin memerlukan semacam "lem" untuk menggabungkan semuanya, semacam bahasa scripting (misalnya bash) atau beberapa panggilan manual dimungkinkan.

1. protokol http.

HTTP adalah protokol yang digunakan saat menerima data dari server web. Ini adalah protokol yang sangat sederhana yang dibangun di TCP / IP. Protokol juga memungkinkan Anda untuk mengirim informasi ke server dari klien menggunakan beberapa metode, seperti yang akan ditunjukkan di bawah ini.

HTTP adalah deretan teks ASCII yang dikirim dari klien ke server untuk meminta tindakan apa pun. Setelah menerima permintaan, server merespons klien dengan beberapa string teks layanan, dan kemudian benar-benar konten.

Menggunakan Curl -v Key, Anda dapat melihat perintah Curl mana yang mengirim server, serta teks informasi lainnya. Kunci -v mungkin satu-satunya kesempatan untuk men-debug atau bahkan memahami fitur-fitur interaksi Curl dan server Web.

2. URL

Format URL (Locator Resource Locator - Universal Resource Address) menetapkan alamat sumber daya tertentu di Internet. Ini mungkin diketahui oleh Anda, contoh URL: http://curl.haxx.se atau https://yourbank.com.

3. Dapatkan (dapatkan) halaman

Permintaan HTTP paling sederhana dan paling umum adalah untuk mendapatkan isi URL. URL dapat merujuk ke halaman web, gambar atau file. Klien mengirim permintaan GET ke server dan menerima dokumen yang diminta. Jika Anda menjalankan perintah

# Curl http://curl.haxx.se.

anda akan menerima halaman web yang diambil ke jendela terminal Anda. Dokumen HTML lengkap yang terkandung pada alamat URL ini.

Semua jawaban http berisi satu set header yang biasanya disembunyikan. Untuk melihatnya dengan dokumen itu sendiri, gunakan Curl -i Key. Anda juga dapat meminta hanya header menggunakan kunci -Saya (yang akan membuat curl membuat permintaan kepala).

4. Bentuk

Bentuk - Cara utama untuk melihat situs web sebagai halaman HTML dengan bidang yang digunakan pengguna, dan kemudian mengklik tombol "OK" atau "Kirim", setelah itu data dikirim ke server. Server kemudian menggunakan data yang diterima dan memutuskan cara bertindak lebih lanjut: Cari informasi dalam database, tunjukkan alamat yang dimasukkan pada peta, tambahkan pesan kesalahan atau gunakan informasi untuk otentikasi pengguna. Tentu saja, ada beberapa jenis program di sisi server yang menerima data Anda.

4.1 Dapatkan.

Formulir GET menggunakan metode GET, misalnya, sebagai berikut:

Jika Anda membuka kode ini di browser Anda, Anda akan melihat formulir dengan bidang teks dan tombol dengan tulisan "OK". Jika Anda memasukkan "1905" dan klik OK, browser akan membuat URL baru, yang akan berlanjut. URL akan diwakili oleh string yang terdiri dari jalur URL sebelumnya dan string yang mirip dengan "Junk.CGI? Birthyear \u003d 1905 & tekan \u003d OK".

Misalnya, jika formulir itu terletak di "www.hotmail.com/when/birth.html", maka ketika Anda mengklik tombol OK, Anda akan jatuh pada URL "www.hotmail.com/when/junk.cgi ? Birthyear \u003d 1905 & tekan \u003d OK ".

Sebagian besar mesin pencari bekerja dengan cara ini.

Untuk melengkung membentuk permintaan-permintaan, cukup masukkan apa yang diharapkan dari formulir:

# Curl "www.hotmail.com/when/junk.cgi?birthyear\u003d1905&press\u003dok"

4.2 posting.

Metode GET mengarah pada fakta bahwa semua informasi yang dimasukkan ditampilkan di bilah alamat browser Anda. Mungkin baik ketika Anda perlu menambahkan halaman dalam bookmark, tetapi ini adalah defisiensi yang jelas ketika Anda memasukkan informasi rahasia di bidang formulir, atau ketika jumlah informasi yang dimasukkan ke dalam bidang terlalu besar (yang mengarah ke URL yang tidak dapat dibaca. ).

Protokol HTTP menyediakan metode posting. Menggunakannya, klien mengirim data secara terpisah dari URL dan oleh karena itu Anda tidak akan melihatnya di bilah alamat.

Formulir yang menghasilkan permintaan pos mirip dengan yang sebelumnya:

Curl dapat membentuk pasca-kueri dengan data yang sama dengan berikut:

# Curl -d "Birthyear \u003d 1905 & tekan \u003d% 20ok% 20" www.hotmail.com/when/junk.cgi

Permintaan posting ini menggunakan "aplikasi tipe konten / x-www-form-urlencoded", ini adalah metode terluas yang digunakan.

Data yang Anda kirim ke server harus dikodekan dengan benar, Curl tidak akan melakukannya untuk Anda. Misalnya, jika Anda ingin data berisi spasi, Anda perlu mengganti ruang ini pada% 20, dll. Kurangnya perhatian terhadap masalah ini adalah kesalahan yang sering, karena data yang ditransmisikan bukan sebagaimana mestinya.

Di tahun 1995 yang jauh, cara tambahan untuk mengirimkan data pada HTTP didefinisikan. Ini didokumentasikan dalam RFC 1867, jadi metode ini kadang-kadang disebut posting RFC1867.

Metode ini terutama dirancang untuk mendukung file unduhan yang lebih baik. Formulir yang memungkinkan pengguna untuk mengunggah file, melihat HTML tentang sebagai berikut:

Perhatikan bahwa jenis konten tipe konten diatur ke Multipart / Form-Data.

Untuk mengirim data dalam formulir ini menggunakan Curl, masukkan perintah:

# Curl -f. [Dilindungi Email] -F tekan \u003d ok

4.4 bidang tersembunyi

Cara biasa untuk mengirimkan informasi negara dalam aplikasi HTML adalah penggunaan bidang tersembunyi dalam bentuk. Bidang tersembunyi tidak diisi, mereka tidak terlihat bagi pengguna dan ditransmisikan dengan cara yang sama seperti bidang konvensional.

Contoh sederhana dari formulir dengan satu bidang yang terlihat, satu tombol tersembunyi dan ok:

Untuk mengirim permintaan pos dengan Curl, Anda tidak perlu memikirkan bidang tersembunyi atau tidak. Untuk Curl, mereka semua sama:

# Curl -d "Birthyear \u003d 1905 & tekan \u003d OK & ORANG \u003d Daniel"

4.5 Cari tahu seperti apa permintaan posting.

Ketika Anda ingin mengisi formulir dan mengirim data ke server menggunakan Curl, Anda mungkin ingin permintaan POST untuk terlihat persis seperti yang dibuat menggunakan browser.

Cara sederhana untuk melihat permintaan pos Anda adalah menyimpan halaman HTML dengan formulir disk, mengubah metode Get, dan klik tombol "Kirim" (Anda juga dapat mengubah URL yang akan ditransmisikan oleh data).

Apakah Anda akan melihat bahwa data bergabung dengan URL yang dipisahkan oleh simbol "?", Seperti yang diharapkan saat menggunakan get-form.

5. Masukan.

Mungkin cara terbaik untuk mengunggah data ke server HTTP adalah menggunakan put. Sekali lagi, memerlukan program (skrip) pada bagian server, yang tahu apa yang harus dilakukan dan cara mengonsumsi streaming HTTP.

Kirim file ke server menggunakan Curl:

# Curl -t uploadfile www.uploadhttp.com/receive.cgi

6. Otentikasi

Otentikasi - Mentransfer server nama pengguna dan kata sandi, setelah itu memeriksa apakah Anda memiliki hak untuk menjalankan permintaan yang diperlukan. Otentikasi Dasar (yang Curl menggunakan default) didasarkan pada teks terbuka, yang berarti bahwa nama pengguna dan kata sandi tidak akan dienkripsi, tetapi hanya sedikit "mendung" sesuai dengan algoritma Base64, yang membuat kesempatan untuk mempelajari informasi ini kepada penyerang Di jalan antara Anda dan server HTTP.

Catatan Curl Gunakan Nama Pengguna dan Kata Sandi:

# Curl -u nama: kata sandi www.secrets.com

Situs ini mungkin memerlukan penggunaan metode otentikasi lain (lihat apa yang ditulis server di header), dalam kasus ini Anda dapat menggunakan tombol --ntlm, --digest, --negotiate atau bahkan --Authate. Terkadang akses ke server HTTP eksternal terjadi melalui proxy, jadi sering buat di perusahaan dan perusahaan. Proxy HTTP mungkin memerlukan nama pengguna dan kata sandi Anda untuk mengakses Internet. Kunci Curl yang sesuai:

# Curl proxyuser: proxypassword curl.haxx.se

Jika proxy memerlukan otentikasi NTLM, tentukan --Proxy-NTLM jika metode interest adalah - mencerna -PROXY.

Jika Anda tidak menentukan kata sandi di tombol -u dan -u, maka Curl akan menanyakannya dalam mode interaktif Anda.

Perhatikan bahwa ketika ikal bekerja, baris mulai (dan dengan itu dan tombol, dan kata sandi) dapat dilihat pada pengguna lain dari sistem Anda dalam daftar tugas. Ada cara untuk mencegahnya. Tentang ini di bawah ini.

7. Referer.

Permintaan HTTP dapat mencakup bidang "Referer", yang menunjukkan dari URL mana pengguna datang ke sumber ini. Beberapa program / skrip memeriksa bidang "Referer" dan tidak menjalankan permintaan jika pengguna berasal dari halaman yang tidak dikenal. Meskipun ini adalah cara bodoh untuk memeriksa, bagaimanapun, banyak skrip menggunakannya. Dengan bantuan Curl, Anda dapat memasukkan apa pun di bidang "Referer" dan dengan demikian membuat apa yang Anda butuhkan.

Ini dilakukan sebagai berikut:

# Curl -e http://curl.haxx.se daniel.haxx.se

8. Agen Pengguna.

Semua permintaan HTTP mendukung bidang "Pengguna-Agent", yang menentukan aplikasi klien pengguna. Banyak aplikasi web menggunakan informasi ini untuk membuat halaman dalam satu atau lain cara. Pemrogram web membuat beberapa versi halaman untuk pengguna browser yang berbeda untuk meningkatkan tampilan, menggunakan berbagai skrip JavaScript, VBScript, dll.

Kadang-kadang Anda mungkin menemukan Curl mengembalikan halaman itu bukan seperti yang Anda lihat di browser Anda. Dalam hal ini, relevan untuk menggunakan bidang "Agen Pengguna" untuk sekali lagi menipu server.

Putuskan sambungan ikal di bawah Internet Explorer dengan mobil dengan Windows 2000:

# Curl -a "Mozilla / 4.0 (Kompatibel; MSIE 5.01; Windows NT 5.0)"

Mengapa tidak menjadi Netscape 4.73 pada mesin Linux (PIII):

# Curl -a "mozilla / 4,73 (x11; u; linux 2.2.15 i686)"

9. Redirect (Redirects)

Menanggapi permintaan Anda, server alih-alih halaman itu sendiri dapat mengembalikan indikasi di mana browser harus melanjutkan ke halaman yang diinginkan. Judul yang menunjukkan peramban pengalihan tersebut adalah "Lokasi:".

Secara default, Curl tidak pergi ke alamat yang ditentukan dalam "Lokasi:", dan cukup menunjukkan halaman seperti biasa. Tetapi Anda dapat mengirimkannya sebagai berikut:

# Curl -l www.sitethatredirects.com

Jika Anda menggunakan Curl untuk pasca-permintaan ke situs, yang segera mengarahkan ke halaman lain, Anda dapat dengan aman menggunakan bundel -L dan -D / -F. Curl akan membentuk permintaan pos untuk halaman pertama, dan kemudian dapatkan-permintaan untuk selanjutnya.

10. cookie.

Dengan cookie, browser web mengontrol kondisi di sisi klien. Cookie adalah nama dengan konten terlampir. Server dengan mengirim cookie melaporkan jalur klien dan nama host untuk cookie mana yang harus dikirim ke waktu berikutnya, melaporkan kehidupan cookie dan beberapa parameter lainnya.

Ketika klien terhubung ke server di alamat yang ditentukan dalam cookie yang diterima, klien mengirimkan cookie ini ke server (jika seumur hidup belum kedaluwarsa).

Banyak aplikasi dan server menggunakan metode ini untuk menggabungkan beberapa permintaan dalam satu sesi logis. Untuk curl juga dapat melakukan fitur seperti itu, kita harus dapat menyimpan dan mengirim cookie, seperti yang dilakukan browser.

Cara paling sederhana untuk mengirim cookie ke server setelah menerima halaman dengan CURL adalah menambahkan kunci yang sesuai pada baris perintah:

# Curl -b "nama \u003d Daniel" www.cookiesite.com

Cookie dikirim sebagai tajuk HTTP biasa. Ini memungkinkan CURL untuk menyimpan cookie, menjaga tajuk utama. Menyimpan cookie menggunakan curl dijalankan oleh perintah:

# Curl -d headers_and_cookies www.cookiesite.com

(Ngomong-ngomong, lebih baik menggunakan kunci-kunci untuk menyimpan cookie, tentang hal itu di bawah).

Curl memiliki cookie handler berfitur lengkap, yang berguna ketika Anda ingin terhubung sekali lagi ke server dan menggunakan cookie yang tersimpan terakhir kali (atau didorong secara manual). Untuk menggunakan cookie yang disimpan dalam file, hubungi curl seperti ini:

# Curl -b stored_cookies_in_file www.cookiesite.com

"Mesin Cookie" Curl menyala ketika Anda menentukan kunci -b. Jika Anda ingin Curl hanya memiliki cookie yang dirasakan, gunakan -b dengan file yang tidak ada. Misalnya, jika Anda ingin CURL menerima cookie dari halaman, dan kemudian melakukan pengalihan (mungkin diberi cookie yang diterima, Anda dapat menghubungi Curl sebagai:

# Curl -b nada -l www.cookiesite.com

Curl mampu membaca dan menulis cookie dengan format Netscape dan Mozilla. Ini adalah cara yang mudah untuk bertukar cookie antara browser dan skrip otomatis. Kunci -b secara otomatis menentukan apakah file cookie ini adalah file browser yang ditentukan dan memprosesnya sesuai, dan menggunakan tombol -C / cookie-jar, Anda dapat memaksa curl untuk merekam cookie baru pada penyelesaian operasi:

# Curl -b cookie.txt -c newcookies.txt www.cookiesite.com

11. https.

Ada beberapa cara untuk melindungi transmisi HTTP Anda. Protokol paling terkenal yang memutuskan tugas ini adalah HTTPS, atau HTTP melalui SSL. SSL mengenkripsi semua data yang dikirim dan diterima melalui jaringan, yang meningkatkan kemungkinan informasi Anda akan tetap dalam kerahasiaan.

Curl mendukung kueri ke server HTTPS berkat perpustakaan OpenSSL gratis. Permintaan terjadi dengan cara biasa:

# Curl https://that.secure.server.com.

11.1 Sertifikat

Di dunia HTTPS untuk otentikasi selain nama pengguna dan kata sandi yang Anda gunakan sertifikat. Curl mendukung sertifikat di sisi klien. Semua sertifikat dikunci oleh frasa kunci yang perlu Anda masukkan sebelum Curl dapat mulai bekerja dengannya. Frasa kunci dapat dicantumkan pada baris perintah, atau dimasukkan dalam mode interaktif. Sertifikat dalam Curl digunakan sebagai berikut:

# Curl -e mycert.pem https://that.secure.server.com

Curl juga memeriksa server ke keaslian, memeriksa sertifikat server dengan disimpan secara lokal. Ketidakkonsistenan yang ditemukan akan mengarah pada fakta bahwa Curl akan menolak untuk terhubung. Untuk mengabaikan pemeriksaan otentikasi, gunakan kunci -K.

Informasi lebih rinci tentang sertifikat dapat ditemukan pada halaman http://curl.haxx.se/docs/sscerts.html.

12. Header permintaan arbitrer

Anda mungkin perlu mengubah atau menambahkan elemen permintaan curl individu.

Misalnya, Anda dapat mengubah permintaan pos untuk mencari dan mengirim data sebagai "tipe konten: teks / xml" (alih-alih tipe konten biasa):

# Curl -d ""-H" tipe konten: teks / xml "-x propfind url.com

Anda dapat menghapus judul apa pun dengan menentukannya tanpa konten. Misalnya, Anda dapat menghapus header "host:", dengan demikian membuat permintaan "kosong":

# Curl -h "host": "http://mysite.com

Anda juga dapat menambahkan berita utama. Mungkin server Anda akan membutuhkan header "tujuan:":

# Curl -h "Tujuan: http://moo.com/nowhere" http://url.com

13. Debugging.

Sering terjadi bahwa situs merespons permintaan curl bukan untuk permintaan browser. Dalam hal ini, Anda perlu memaksimalkan browser Curl:

  • Gunakan kunci -trace-ASCII untuk menyimpan laporan permintaan terperinci untuk kemudian mempelajarinya secara detail dan menangani masalah tersebut.
  • Pastikan Anda memeriksa cookie dan menggunakannya jika perlu (baca -b dan saving key -c)
  • Tentukan di lapangan "agen pengguna" salah satu browser populer terbaru
  • Isi bidang "Referer" saat browser melakukannya
  • Jika Anda menggunakan permintaan POST, pastikan semua bidang ditransmisikan dalam urutan yang sama dengan browser (lihat di atas, paragraf 4.5)

Pembantu yang baik dalam bisnis yang sulit ini adalah plugin untuk Mozilla / Firefox LiveHTPHEader, yang memungkinkan Anda untuk melihat semua header yang mengirim dan menerima browser ini (bahkan ketika menggunakan HTTPS).

Pendekatan tingkat bawah adalah untuk menangkap lalu lintas HTTP pada jaringan menggunakan program-program seperti Ethereal atau TCPDump, diikuti oleh analisis, yang merupakan tajuk utama yang diterima dan dikirim oleh browser (HTTPS membuat pendekatan ini tidak efektif).

Apa itu PHP cURL?

Client URL atau umumnya disingkat menjadi cURL, adalah project open source yang berupa program yang berjalan pada command line (CMD), namun saat ini sudah tersedia library pada banyak bahasa pemrograman seperti PHP, Phyton, dan masih banyak lainya.

Apa itu Curl_setopt?

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); Set Option pada cURL yang berfungsi untuk mengembalikan transfer menjadi bentuk String. Script cURL diatas bertujuan untuk menampilkan isi halaman dari URL https://sandbox.

Tuliskan langkah instalasi cURL?

Cara Install dan Menggunakan cURL pada Windows.
Download cURL di curl.se/windows/. ... .
Ekstrak cURL yang tadi sudah Anda download. ... .
Agar bisa digunakan di Command Prompt (cmd) kita perlu memasukkan cURL ke dalam path terlebih dahulu. ... .
Setelah itu pilih Environment Variables..

Apa itu cURL api?

Curl adalah “alat baris perintah untuk mentransfer data yang ditentukan dengan sintaks URL”, yang membuatnya berguna untuk berinteraksi dengan REST APIs dan sumber situs lainnya.