PHP CURL - fungsi dan contoh penggunaan. Curl_setopt - Menyetel opsi untuk sesi CURL Menggunakan curl dari baris perintah




CURL adalah paket perangkat lunak yang terdiri dari utilitas baris perintah dan perpustakaan untuk mentransfer data menggunakan sintaks URL.

CURL mendukung banyak protokol, termasuk DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, Telnet dan TFTP.

Unggah file terpisah
Perintah berikut akan mengambil konten URL dan menampilkannya pada output standar (yaitu terminal Anda).

Curl https://mi-al.ru/ > mi-al.htm % Total % Diterima % Xferd Rata-rata Kecepatan Waktu Waktu Waktu Saat Ini Dload Upload Total Dihabiskan Kecepatan Kiri 100 14378 0 14378 0 0 5387 0 --: --:- - 0:00:02 --:--:-- 5387

Menyimpan keluaran cURL ke file
Kita dapat menyimpan hasil perintah curl ke file menggunakan opsi -o/-O.
  • -Hai(o huruf kecil) hasilnya akan disimpan dalam file yang ditentukan pada baris perintah
  • -HAI(huruf besar O) nama file akan diambil dari URL dan akan digunakan untuk menyimpan data yang diterima.

$ curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html

Halaman gettext.html sekarang akan disimpan dalam file bernama 'mygettext.html'. Ketika curl dijalankan dengan opsi -o, ini akan menampilkan bilah kemajuan pengunduhan sebagai berikut.

% Total % Diterima % Xferd Rata-rata Kecepatan Waktu Waktu Waktu Saat Ini Dload Upload Total Dihabiskan Kecepatan Kiri 66 1215k 66 805k 0 0 33060 0 0:00:37 0:00:24 0:00:13 45900 100 1215k 100 1215k 0 0 39474 0 0:00:31 0:00:31 --:--:-- 68987

Saat Anda menggunakan curl -O (huruf besar O), konten itu sendiri akan disimpan ke file bernama 'gettext.html' di mesin lokal.

$ keriting -O http://www.gnu.org/software/gettext/manual/gettext.html

Catatan: Saat curl perlu menulis data ke terminal, curl akan menonaktifkan bilah kemajuan untuk menghindari kebingungan dengan data yang dicetak. Kita dapat menggunakan opsi '>'|'-o'|'-O' untuk mentransfer hasilnya ke file.

Mengambil banyak file sekaligus
Kita dapat mengunduh banyak file sekaligus dengan menentukan semua URL pada baris perintah.

Keriting -O URL1 -O URL2

Perintah di bawah ini akan mengunduh index.html dan gettext.html dan menyimpannya dengan nama yang sama di direktori saat ini.

Keriting -O http://www.gnu.org/software/gettext/manual/html_node/index.html -O http://www.gnu.org/software/gettext/manual/gettext.html

Harap dicatat, ketika kami mengunduh banyak file dari server yang sama seperti yang ditunjukkan di atas, curl akan mencoba menggunakan kembali koneksi tersebut.

Ikuti header Lokasi HTTP dengan opsi -L
Secara default, CURL tidak mengikuti Lokasi HTTP di header (pengalihan). Ketika halaman web yang diminta dipindahkan ke lokasi lain, respons terkait akan dikirim di header Lokasi HTTP.
Misalnya, ketika seseorang mengetik google.com ke browser dari negaranya, mereka akan otomatis diarahkan ke 'google.co.xx'. Ini dilakukan berdasarkan header Lokasi HTTP seperti yang ditunjukkan di bawah ini.

Keriting https://www.google.com/?gws_rd=ssl

302 Pindah

302 Pindah

Dokumen telah dipindahkan ke sini.

Output di atas mengatakan bahwa dokumen yang diminta telah dipindahkan ke '

Tersembunyi dari tamu

.
Anda dapat memberitahu curl untuk mengikuti pengalihan, ini dilakukan dengan menggunakan opsi -L seperti yang ditunjukkan di bawah ini. Sekarang kode sumber html akan diunduh

Tersembunyi dari tamu

.

Keriting -L https://www.google.com/?gws_rd=ssl

Memperbarui unduhan sebelumnya

Menggunakan opsi -C Anda dapat melanjutkan pengunduhan yang terhenti karena alasan tertentu. Ini akan berguna ketika pengunduhan file besar gagal.
Jika kita mengatakan '-C -', maka curl akan mencari tempat untuk melanjutkan pengunduhan. Kita juga dapat menentukan '-C<смещение>'. Offset byte yang ditentukan akan dilewati dari awal file sumber.
Mulai pengunduhan besar dengan curl dan tekan Ctrl-C untuk menghentikannya di tengah pengunduhan.

$ curl -O http://www.gnu.org/software/gettext/manual/gettext.html ############## 20,1%

Injeksi dihentikan pada 20,1%. Dengan menggunakan “curl -C -” kita dapat melanjutkan memuat dari bagian terakhir yang kita tinggalkan. Sekarang pengunduhan akan berlanjut dari 20,1%.

Keriting -C - -O http://www.gnu.org/software/gettext/manual/gettext.html ################ 21,1%

Batas kecepatan data
Anda dapat membatasi kecepatan transfer data dengan opsi –limit-rate. Anda dapat melewatkan kecepatan maksimum sebagai argumen.

$ curl --limit-rate 1000B -O http://www.gnu.org/software/gettext/manual/gettext.html

Perintah di atas akan membatasi kecepatan transfer hingga 1000 byte/detik. curl dapat menggunakan kecepatan yang lebih tinggi di puncak. Namun kecepatan rata-ratanya kira-kira 1000 byte/detik.
Di bawah ini adalah bilah kemajuan untuk perintah di atas. Anda dapat melihat bahwa kecepatan saat ini sekitar 1000 byte.

% Total % Diterima % Xferd Rata-rata Kecepatan Waktu Waktu Waktu Saat Ini Dload Upload Total Dihabiskan Kecepatan Kiri 1 1215k 1 13601 0 0 957 0 0:21:40 0:00:14 0:21:26 999 1 1215k 1 14601 0 0 960 0 0:21:36 0:00:15 0:21:21 999 1 1215k 1 15601 0 0 962 0 0:21:34 0:00:16 0:21:18 999

Muat file hanya jika diubah sebelum/sesudah waktu yang ditentukan
Anda bisa mendapatkan file yang berubah setelah waktu tertentu menggunakan opsi -z di curl. Ini akan berfungsi untuk FTP dan HTTP.

Perintah di atas hanya akan memuat yy.html jika telah diubah lebih baru dari tanggal dan waktu yang ditentukan.

Perintah di atas akan memuat file.html jika telah diubah sebelum tanggal dan waktu yang ditentukan. Ketik 'man curl_getdate' untuk mempelajari lebih lanjut tentang berbagai sintaks yang didukung untuk ekspresi tanggal.

Melewati otentikasi HTTP di cURL
Terkadang situs web memerlukan nama pengguna dan kata sandi untuk melihat kontennya. Dengan menggunakan opsi -u, Anda dapat meneruskan kredensial ini dari cURL ke server web seperti yang ditunjukkan di bawah ini.

$ curl -u nama pengguna: URL kata sandi

Catatan: Secara default, curl menggunakan otentikasi dasar HTTP. Kita dapat mengatur metode otentikasi lain menggunakan –ntlm | -intisari.


cURL juga dapat digunakan untuk mendownload file dari server FTP. Jika jalur FTP yang ditentukan adalah direktori, maka secara default daftar file di dalamnya akan ditampilkan.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/xss.php

Perintah di atas akan mendownload file xss.php dari server ftp dan menyimpannya di direktori lokal.

$ curl -u ftpuser:ftppass -O ftp://ftp_server/public_html/

Di sini URL merujuk ke direktori. Oleh karena itu, cURL akan mencantumkan file dan direktori di URL yang diberikan.


CURL mendukung rentang yang ditentukan dalam URL. Ketika suatu rentang diberikan, file terkait dalam rentang tersebut akan dimuat. Ini akan berguna saat mengunduh paket dari situs mirror FTP.

$ curl ftp://ftp.uk.debian.org/debian/pool/main//

Perintah di atas akan mencantumkan semua paket dalam rentang a-z di terminal.

Mengunggah file ke server FTP
Curl juga dapat digunakan untuk mengunggah ke server FTP dengan opsi -T.

$ curl -u ftpuser:ftppass -T file saya.txt ftp://ftp.testserver.com

Perintah di atas akan mengunggah file bernama myfile.txt ke server FTP. Anda juga dapat mengunggah banyak file sekaligus menggunakan rentang.

$ curl -u ftpuser:ftppass -T "(file1,file2)" ftp://ftp.testserver.com

Secara opsional kita dapat menggunakan “.” untuk menerima dari input standar dan meneruskannya ke mesin jarak jauh.

$ curl -u ftpuser:ftppass -T - ftp://ftp.testserver.com/myfile_1.txt

Perintah di atas akan menerima output dari pengguna dari input standar dan menyimpan konten di server ftp sebagai 'myfile_1.txt'.
Anda dapat menentukan '-T' untuk setiap URL, dan setiap pasangan file alamat akan menentukan tempat untuk mengunggah apa

Informasi lebih lanjut dengan peningkatan verbositas dan opsi penelusuran
Anda dapat mengetahui apa yang terjadi menggunakan opsi -v. Opsi -v mengaktifkan mode verbal dan akan mencetak detail.

Keriting -v https://www.google.co.th/?gws_rd=ssl

Perintah di atas akan menghasilkan output sebagai berikut

* URL yang dibuat ulang ke: https://www.google.co.th/?gws_rd=ssl * Nama host TIDAK ditemukan di cache DNS * Mencoba 27.123.17.49... * Terhubung ke www.google.co.th (27.123. 17.49) port 80 (#0) > GET / HTTP/1.1 > Agen-Pengguna: curl/7.38.0 > Host: www.google.co.th > Terima: */* >< HTTP/1.1 200 OK < Date: Fri, 14 Aug 2015 23:07:20 GMT < Expires: -1 < Cache-Control: private, max-age=0 < Content-Type: text/html; charset=windows-874 < P3P: CP="This is not a P3P policy! See https://support.google.com/accounts/answer/151657?hl=en for more info." * Server gws is not blacklisted < Server: gws < X-XSS-Protection: 1; mode=block < X-Frame-Options: SAMEORIGIN < Set-Cookie: PREF=ID=1111111111111111:FF=0:TM=1439593640:LM=1439593640:V=1:S=FfuoPPpKbyzTdJ6T; expires=Sun, 13-Aug-2017 23:07:20 GMT; path=/; domain=.google.co.th ... ... ...

Jika Anda memerlukan informasi lebih detail, Anda dapat menggunakan opsi –trace. Opsi –trace akan mengaktifkan dump jejak penuh dari semua data masuk/keluar untuk file tertentu

16/02/2006 Jeff Penebangan

Curl akan membantu Anda mengelola data yang dihosting di Web. Artikel ini membahas alat Curl gratis, yang dapat digunakan untuk mengirim dan menerima halaman Web dari baris perintah. Curl memudahkan untuk mengotomatisasi banyak hal

Curl akan membantu Anda mengelola data Anda di Web

Artikel ini membahas alat gratis bernama Curl yang memungkinkan Anda mengirim dan menerima halaman Web dari baris perintah. Curl memudahkan untuk mengotomatisasi banyak tugas keamanan dan administratif, seperti mengekstraksi halaman Web untuk dianalisis atau mengunduh patch keamanan dari Web.

Instalasi ikal

Curl disertakan dengan banyak distribusi Unix. Biner dan sumber tersedia untuk sebagian besar sistem operasi lain. Bahkan pemrogram PHP sumber terbuka dapat menggunakan Curl untuk mengakses konten Web dengan aman langsung dari skrip PHP.

Curl memerlukan paket OpenSSL untuk bekerja dengan situs Web Secure Sockets Layer (SSL). Ada dua versi Curl: satu dengan SSL dan satu lagi tanpa SSL. Saya merekomendasikan yang pertama, karena SSL dapat melindungi data dengan andal.

Sebelum Anda dapat menggunakan Curl dengan fungsionalitas SSL, Anda harus mengunduh dan menginstal paket OpenSSL secara terpisah. Biner OpenSSL untuk Windows dapat diunduh dari situs proyek GnuWin32 SourceForge di . Ada banyak alat berguna lainnya di situs ini yang telah di-porting ke Windows.

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

Salin "C:Program FilesGnuWin32 binlibay32.dll" %windir%system32 salin "C:Program FilesGnuWin32 binlibssl32.dll" %windir%system32

Setelah ini Anda dapat menginstal Curl. Biner Curl yang kompatibel dengan SSL untuk Windows dapat ditemukan di http://curl.haxx.se/latest.cgi?curl=win32-ssl-sspi. Versi terbaru, curl 7.15.0, ada di win32-ssl-sspi.zip, yang berisi curl.exe dan dokumentasi.

Setelah menginstal Curl, Anda harus memastikannya berfungsi dengan memasukkan perintah

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

Jika kata berwarna muncul di layar (misalnya hijau), Curl berfungsi. Dalam contoh sederhana ini, Curl mengambil konten Infocon dari situs Web Internet Storm Center SANS Institute. Hijau berarti Internet berfungsi normal dan tidak ada ancaman serius yang terdeteksi. Jika alih-alih hijau, kata kuning, oranye, atau merah muncul di layar, kesampingkan artikel ini dan kunjungi situs webnya http://isc.sans.org untuk mempelajari tentang kondisi berisiko tinggi di Internet. Jika terjadi kesalahan, Anda harus memeriksa apakah Curl sudah terpasang dengan benar.

Pada dasarnya, Curl mengambil halaman Web dan kemudian mengeluarkan sumber HTML halaman tersebut ke konsol. Namun, kemampuan utilitasnya lebih luas. Curl memiliki pemeriksaan kesalahan bawaan. Misalnya perintah

Keriting http://noserverdi sini

memberikan kesalahan Curl: (6) Tidak dapat menyelesaikan host: noserverhere; Host tidak ditemukan. Kode kesalahan dapat digunakan dalam skrip untuk menguji ketersediaan halaman Web atau respons server Web. Misalnya, jika Anda menggunakan Curl untuk mengambil halaman Web setiap hari, khususnya statistik situs Web harian, Anda dapat menambah skrip dengan kode sumber yang mencari kode kesalahan. Jika Curl mengeluarkan kode kesalahan Curl: (7) tidak dapat terhubung ke host, Anda dapat segera mengeluarkan peringatan atau mengirim email.

Mengekstraksi data terenkripsi

Salah satu keunggulan terpenting Curl adalah kompatibilitas SSL-nya. Halaman HTTPS yang diminta dikirim terenkripsi melalui jaringan, dan Curl kemudian menampilkan teks yang dipulihkan di layar. Curl juga memeriksa sertifikat - tanggal kedaluwarsa sertifikat, apakah nama host cocok dengan nama host di sertifikat, dan tingkat kepercayaan sertifikat akar - dan memperingatkan jika sertifikat salah. Opsi -cacert memungkinkan Anda menentukan file sertifikat tertentu. Pemeriksaan sertifikat dinonaktifkan menggunakan opsi -k. Pendekatan alternatif adalah dengan menggunakan opsi -insecure.

Tidak hanya untuk WWW

Kemampuan Curl lebih dari sekadar mengirim file melalui Internet. Menggunakan Curl Anda dapat dengan cepat membuat daftar direktori situs FTP:

Keriting ftp://myftpsite

Untuk melihat subdirektori situs, masukkan perintah

Keriting ftp://myftpsite/subdir/

Untuk mendownload file dari Internet, cukup tentukan nama file di URL. Contoh berikut memuat file bernama readme.txt langsung dari baris perintah dan menampilkannya di layar:

Curl ftp://ftp.microsoft.com/deskapps/games/readme.txt

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

Secara default, data dikeluarkan langsung ke konsol, namun dapat dialihkan ke file menggunakan opsi -o dan -O. Untuk mendapatkan halaman dan menyimpannya ke disk, Anda harus menentukan opsi -o. Opsi -O menyimpan halaman yang dihasilkan dalam file lokal, dan Curl mengambil nama dokumen jarak jauh. Jika URL tidak menyertakan nama file, operasi ini akan gagal. Jika Anda menggunakan Curl untuk mengirim permintaan ke situs Web tanpa nama file, tetapi ingin menyimpan hasilnya dalam file, Anda dapat menentukan nama file pada baris perintah, misalnya:

Autentikasi

Curl menyediakan metode otentikasi Dasar, Intisari, dan Terintegrasi. Di sebagian besar situs, halaman otentikasi berbasis formulir dapat diakses menggunakan fungsi pengiriman Curl, seperti yang akan ditunjukkan di bawah. Ini berarti Anda bisa mengirimkan data formulir, seperti nama pengguna dan kata sandi Anda, ke situs Web jarak jauh yang meminta Anda memasukkan informasi pada halaman Web tersebut. Anda dapat menggunakan opsi -u untuk meneruskan kredensial, atau menempelkannya ke URL, seperti yang biasa dilakukan di FTP, misalnya:

Curl ftp://nama pengguna: kata sandi@situshtmlsaya

Dengan menggunakan Curl, teknik yang dipinjam dari FTP dapat ditransfer ke HTTP, seperti pada contoh berikut:

Keriting http://nama pengguna:kata sandi @myhtmlsite/default.htm

Curl juga menyediakan akses ke halaman Web melalui server proxy. Oleh karena itu, Curl dapat dikonfigurasi untuk menggunakan server proxy untuk otentikasi dalam mode Basic, Digest, dan NTLM.

Baca dokumentasinya

Dalam satu artikel sulit untuk mencakup semua fungsi Curl, termasuk mengunggah file ke server (-T), dan hanya melihat informasi di header HTTP (-I), dan melihat semua data dalam mode detail (-V ), dan keluaran tersembunyi ( -s). Saya sarankan untuk melihat lebih mendalam fitur-fitur Curl dalam tutorial yang diposting di http://curl.haxx.se/docs .

Contoh penggunaan ikal

Sekarang kita telah mempelajari dasar-dasar Curl, mari kita lihat contoh sederhana mengambil data dari situs Web dengan memberikan beberapa masukan. Mari kita buat alat Whois sederhana yang menunjukkan kesederhanaan dan kemudahan penggunaan Curl dan prosedur pengiriman data ke situs Web menggunakan parameter -d. Dalam contoh ini, Curl mengirimkan alamat IP ke situs Web Arin Whois dan kemudian mengambil hasilnya dari situs tersebut. Whois mencari informasi tentang pemilik alamat IP.

Penting untuk meneliti situs Web sebelum Anda memulai, karena kode sumber setiap situs berbeda, dan Curl tidak selalu berfungsi sama di setiap situs. Kunjungan awal ke situs memungkinkan Anda mengumpulkan informasi yang diperlukan agar Curl dapat berfungsi. Dalam contoh ini, saya menggunakan browser untuk mengunjungi situs Web http://www.arin.net/whois/, dan memperhatikan bahwa situs tersebut memiliki satu bidang entri data di mana pengunjung menunjukkan alamat IP yang mereka minati. Anda perlu mendapatkan rincian bidang ini, yang merupakan bagian dari formulir Web. Contoh ini menggunakan skrip Perl formfind.pl ( http://cool.haxx.se/cvs.cgi/curl/perl/contrib/ formfind?rev=HEAD&content-type=text/vnd.viewcvs-markup). Skrip Formfind.pl mengubah data formulir menjadi hasil keluaran yang berguna dan memudahkan pencarian data secara manual dalam HTML. Tentu saja, Perl harus diterapkan di komputer Anda untuk menjalankan Formfind. Paket Win32 Perl yang bagus dapat dipesan dari situs web ActiveState ActivePerl di http://www.activestate.com .

Mari kita lihat contohnya lebih detail. Pertama, mari kita lihat situs Web yang berisi formulir yang meminta informasi:

Keriting -o whoisOutputFile http://www.arin.net/whois/

Perintah ini mengambil halaman Whois dari http://www.arin.net dan menyimpannya dalam file teks whoisOutputFile, yang berisi teks HTML asli yang dirender oleh browser saat situs dikunjungi.

Maka Anda perlu mencari dan memilih data formulir:

./formfind.pl

Formfind menyediakan variabel formulir dan kemungkinan nilainya. Dalam contoh ini, hasil keluarannya cukup sederhana (lihat. layar 1).

Perhatikan data formulir Input bernama queryinput. Ini adalah kolom teks dimana Curl harus mengirimkan alamat IP yang Anda cari. Alamat IP spesifik tidak menjadi masalah - dalam contoh ini alamat Microsoft digunakan. Menggunakan parameter -d, alamat IP yang dicari diteruskan ke kolom input kueri:

Keriting -d "queryinput= 207.46.133.140" http://ws.arin.net/cgibin/whois.pl

Perintah Curl dengan opsi -d mencari data dalam formulir, dalam hal ini input kueri, yang mewakili alamat IP yang sedang dicari. 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 formfind di Layar 1.

Contoh ini juga mengambil teks HTML asli dari respons Whois, namun disembunyikan oleh sekelompok tag HTML. Secara default, pesan status Curl menunjukkan ukuran dokumen, persentase selesai, dan kecepatan penerusan. Outputnya dapat dibersihkan sedikit dan disaring berdasarkan nama organisasi yang memiliki alamat IP. Status ikal dapat dinonaktifkan menggunakan opsi -s. Perintah harus dijalankan melalui grep untuk mendapatkan OrgName saja:

Curl -s -d "queryinput= 207.46.133.140" http://ws.arin.net/cgibin/whois.pl | grep NamaOrg

Dalam contoh ini, output menunjukkan bahwa OrgName adalah Microsoft Corp.

@echo off curl -k -s -d "queryinput= %1" http://ws.arin.net/cgibin/whois.pl | grep NamaOrg


Mengunggah File Web dari Baris Perintah


Contoh praktis nyata: Anda perlu me-reboot router (modem) Anda untuk mengubah alamat IP. Untuk melakukan ini, Anda perlu: masuk ke router, buka halaman pemeliharaan dan klik tombol "Reboot". Jika tindakan ini perlu dilakukan beberapa kali, maka prosedurnya harus diulang. Setuju, Anda tidak ingin melakukan rutinitas ini secara manual setiap saat. cURL memungkinkan Anda mengotomatiskan semua ini. Hanya dengan beberapa perintah cURL Anda dapat memperoleh otorisasi dan menyelesaikan tugas di router.

  • cURL berguna untuk mengambil data dari website pada baris perintah.
Contoh praktis lainnya: kami ingin menerapkan tampilan statistik umum untuk beberapa situs. Jika kita menggunakan cURL, maka ini menjadi tugas yang sangat sepele: dengan menggunakan cURL kita mengautentikasi pada layanan pengumpulan statistik (jika diperlukan), kemudian (sekali lagi menggunakan perintah cURL) kita mendapatkan halaman yang diperlukan, mengurai data yang kita butuhkan; prosedur ini diulangi untuk semua situs kami, lalu kami tambahkan dan tampilkan hasil akhirnya.

Itu. kasus penggunaan cURL cukup nyata, meskipun sebagian besar cURL dibutuhkan oleh programmer yang menggunakannya untuk program mereka.

CURL mendukung banyak protokol dan metode otorisasi, dapat mentransfer file, bekerja dengan benar dengan cookie, mendukung sertifikat SSL, proxy, dan banyak lagi.

cURL di PHP dan baris perintah

Kita dapat menggunakan cURL dalam dua cara utama: dalam skrip PHP dan pada baris perintah.

Untuk mengaktifkan cURL di PHP di server, Anda perlu menghapus komentar pada baris di file php.ini

Ekstensi=php_curl.dll

Dan kemudian reboot server.

Di Linux Anda perlu menginstal paket curl.

Di Debian, Ubuntu atau Linux Mint:

$ sudoapt-get install ikal


Di Fedora, CentOS atau RHEL:

$ sudo yum instal keriting

Untuk melihat dengan jelas perbedaan penggunaan di PHP dan di baris perintah, kita akan melakukan tugas yang sama dua kali: pertama di skrip PHP, dan kemudian di baris perintah. Mari kita coba untuk tidak bingung.

Mengambil data menggunakan cURL

Mengambil data menggunakan cURL di PHP

Contoh di PHP:

Semuanya sangat sederhana:
$target_url- alamat situs yang kami minati. Setelah alamat situs, Anda dapat memberi titik dua dan menambahkan alamat port (jika port berbeda dari standar).

curl_init- menginisialisasi sesi baru dan mengembalikan pegangan, yang dalam contoh kita ditugaskan ke variabel $ch.

Kami kemudian mengeksekusi permintaan dengan fungsi cURL curl_exec, yang mana deskriptor diteruskan sebagai parameter.

Semuanya sangat logis, tetapi ketika skrip ini dijalankan, konten situs akan ditampilkan di halaman kami. Namun bagaimana jika kita tidak ingin menampilkan konten, tetapi ingin menuliskannya ke dalam variabel (untuk diproses atau diurai selanjutnya).

Mari tambahkan sedikit pada skrip kita:

0) ( echo "Kesalahan ikal: " . curl_error($ch); ) curl_close($ch); ?>

Kami punya garis curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);.

curl_setopt- mengatur opsi. Daftar lengkap opsi dapat ditemukan di halaman ini:

Tersembunyi dari tamu

$response_data = curl_exec($ch);

Sekarang nilai skrip ditetapkan ke variabel $response_data, yang dengannya operasi lebih lanjut dapat dilakukan. Misalnya, Anda bisa menampilkan isinya.

Jahitan

Jika (curl_errno($ch) > 0) ( echo "Kesalahan keriting: " . curl_error($ch); )

berfungsi untuk debugging jika terjadi kesalahan.

Mengambil data menggunakan cURL pada baris perintah

Di baris perintah, cukup ketik

di mana, bukannya mi-al.ru- alamat situs web Anda.

Jika Anda perlu menyalin data ke dalam variabel daripada menampilkan hasilnya di layar, lakukan ini:

Temp="curl mi-al.ru"

Namun, beberapa data masih ditampilkan:

Untuk mencegahnya ditampilkan, tambahkan kunci -S:

Temp="curl -s mi-al.ru"

Anda dapat melihat apa yang telah direkam:

Gema $temp | lebih sedikit

Otentikasi dasar dan HTTP

Otentikasi, sederhananya, adalah memasukkan nama pengguna dan kata sandi.

Otentikasi dasar adalah otentikasi berbasis server. Untuk ini, dua file dibuat: .htaccess Dan .htpasswd

Isi file .htaccess kurang lebih seperti ini

AuthName "Hanya untuk pengguna terdaftar!" AuthType Basic memerlukan AuthUserFile /home/freeforum.biz/htdocs/.htpassw pengguna yang valid


Isi file .htpasswd kira-kira seperti ini:

Mial:CRdiI.ZrZQRRc

Itu. login dan hash kata sandi.

Saat Anda mencoba mengakses folder yang dilindungi kata sandi, browser akan menampilkan tampilan seperti ini:

Otentikasi HTTP terjadi ketika kita memasukkan login dan kata sandi ke dalam formulir di situs web. Otentikasi inilah yang digunakan saat masuk ke email, forum, dll.

Otentikasi CURL dasar (PHP)

Ada sebuah situs web

Tersembunyi dari tamu

Mari kita coba skrip awal kita:

0) ( echo "Kesalahan ikal: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?>

Meskipun skrip percaya bahwa tidak ada kesalahan, kami tidak menyukai hasilnya sama sekali:

Tambahkan dua baris:

Curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); curl_setopt($ch, CURLOPT_USERPWD, "ru-board:ru-board");

Baris pertama kami mengatur jenis otentikasi - dasar. Baris kedua berisi nama dan kata sandi yang dipisahkan oleh titik dua (dalam kasus kami, nama dan kata sandinya sama - ru-board). Ternyata seperti ini:

0) ( echo "Kesalahan ikal: " . curl_error($ch); ) else ( echo $response_data; ) curl_close($ch); ?> Ayo kita coba: 30946 Hebat! Otentikasi cURL dasar (pada baris perintah) Hal yang sama dapat dicapai pada baris perintah dengan satu baris: curl -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/

Saya tidak lupa menentukan tipe otentikasi, hanya saja di cURL tipe otentikasi dasar adalah default.

Semuanya berjalan begitu cepat di baris perintah sehingga, karena frustrasi, saya menulis program berikut. Dia terhubung ke situs dan mengunduh pembaruan terkini:

Temp=`curl -s -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/ | grep -E -o "Perbarui_FED_201(1).(2).(2).7z" | unik | ekor -n 1`; curl -o $temp -u ru-board:ru-board http://62.113.208.29/Update_FED_DAYS/$temp

Hanya dengan beberapa perintah lagi Anda dapat menambahkan:

  • membongkar arsip ke direktori yang ditentukan;
  • meluncurkan pembaruan ConsultantPlus (ini adalah pembaruan untuk itu);
  • Anda dapat memeriksa apakah pembaruan terbaru yang tersedia telah diunduh atau pembaruan baru telah muncul;
  • tambahkan semuanya ke Cron untuk pembaruan harian.
cURL autentikasi HTTP

Otentikasi HTTP Curl di PHP

Kita perlu tahu:

  • alamat tempat mengirim data otentikasi
  • metode pengiriman GET atau POST
  • Gabung
  • kata sandi
Terkadang data ini tidak cukup. Mari kita cari tahu.

Alamat tujuan pengiriman data dapat diambil dari formulir otentikasi. Misalnya:

Kami sedang melihat properti itu tindakan. Itu. halaman terakhir adalah login.php. Kita butuh alamat lengkapnya seperti ini

Tersembunyi dari tamu

Di sini kami juga menemukan metode pengiriman: metode="posting"

Saya juga tahu login dan kata sandinya: admin dan qwerasdfzxcv
Itu. Sebuah string dikirim ke server dari formulir menggunakan metode POST. Secara teoritis, skrip kami sebelumnya, yang kami tambahkan baris baru, seharusnya berfungsi. Itu. otentikasi harus terjadi.

0) ( echo "Kesalahan ikal: " . curl_error($ch); ) else ( ) curl_close($ch); ?>

Baris baru dalam skrip

curl_setopt($ch, CURLOPT_POSTFIELDS, "LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv");

Di Sini curl_setopt- fungsi yang sudah tidak asing lagi bagi kita untuk mengatur opsi cURL, CURLOPT_POSTFIELDS- ini adalah nama opsi yang kami atur. CURLOPT_POSTFIELDS berisi semua data yang ditransfer menggunakan metode POST. Ya, garis itu sendiri LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv- ini adalah data yang sama yang kami kirimkan.

Jika Anda memeriksa formulir dengan cermat, Anda akan melihat bahwa formulir itu juga berisi bidang tersembunyi. Dan datanya bisa diproses atau ditambah dengan JavaScript. Anda bisa mempelajari semua ini, tapi saya lebih suka metode yang lebih sederhana.

Saya menggunakan Wireshark. Program ini dirancang untuk mengendus (mencegat) lalu lintas. Dan di dalamnya sangat mudah untuk melihat apa sebenarnya yang dikirimkan ke situs.

Tonton video kecil ini:


Itu. dengan alamat tempat transfer datanya, menurut saya benar. Namun string yang dikirimkan ternyata jauh lebih rumit.

Saya memasukkan parameter yang benar, dan juga sedikit memodifikasi skrip sehingga tidak hanya masuk, tetapi juga menerima sesuatu dari router:

0) ( echo "Kesalahan ikal: " . curl_error($ch); ) else ( $target_url2 = "http://188.35.8.64:8080/bsc_wlan.php"; $ch2 = curl_init($target_url2); curl_setopt($ ch2, CURLOPT_RETURNTRANSFER, 1); $response_data2 = curl_exec($ch2); preg_match("|f.ssid.value = "(.*)";|", $response_data2, $results2); , "", $results2); $results2 = str_replace("";", "", $results2); echo "Nama jaringan Wi-fi: $hasil2
"; preg_match("|f_wpa.wpapsk1.value(.*)";|", $response_data2, $results3); $hasil3 = str_replace("f_wpa.wpapsk1.value", "", $hasil3); $hasil3 = str_replace("="", "", $hasil3); $hasil3 = str_replace("";", "", $hasil3); gema "Kata sandi jaringan Wi-Fi: $hasil3"; ) curl_close($ch); ?>

Omong-omong, jika pemilik memperbarui kata sandinya (tetapi tidak memperbarui firmware), maka kata sandi baru selalu dapat dilihat di

Tersembunyi dari tamu

(Ini adalah kerentanan yang diketahui pada router D-Link DIR-300, D-Link DIR-320, dan D-Link DAP-1353).

Otentikasi HTTP cURL pada baris perintah

Kita sudah mengetahui alamat lengkapnya, serta string yang akan dikirim. Jadi sederhana saja:

Keriting --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php

Saya pikir semuanya sudah jelas, karena kami telah mempertimbangkan tenggat waktu ini. Jika ada yang belum paham, tanyakan di kolom komentar.

Contoh penggunaan cURL untuk mengambil dan mengurai data adalah serangkaian perintah berikut:

Curl -s --data "ACTION_POST=LOGIN&FILECODE=&VERIFICATION_CODE=&LOGIN_USER=admin&LOGIN_PASSWD=qwerasdfzxcv&login=Log+In+&VER_CODE=" http://188.35.8.64:8080/login.php > /dev/null && echo -e "nn " && echo "Nama jaringan Wi-Fi" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f.ssid.value = "(.)*";" | sed "s/f.ssid.value = "//" | sed "s/";//" && echo "kata sandi jaringan Wi-Fi" && curl -s http://188.35.8.64:8080/bsc_wlan.php | grep -E "f_wpa.wpapsk1.(.)*";" | sed "s/f_wpa.wpapsk1.value//" | sed "s/";//" | sed "s/="//"

Akan lebih tepat untuk menulis judul ini sebagai berikut: Kasus otorisasi “Kompleks”. Itu. Letakkan kata “rumit” dalam tanda petik. Tampaknya rumit hanya pada pandangan pertama, ketika tidak jelas: di mana pengiriman terjadi, apa nama bidangnya, apa sebenarnya yang dikirim, dll.

Namun kenyataannya, semuanya bermuara pada metode POST atau GET. Untuk memahami apa sebenarnya yang dikirim, Anda dapat menyimpan halaman dengan formulir ke disk Anda dan menambahkan fungsi untuk menampilkan data yang dihasilkan untuk dikirim ke tombol kirim. Atau bahkan lebih sederhana - seperti saya, Wireshark.

Jika datanya benar, tetapi otentikasi tidak terjadi, maka Anda perlu menggali petunjuk berikut:

  • atur string pengarah yang benar
  • atur string agen pengguna yang "benar".
Semua ini dapat dilakukan dengan menggunakan metode cURL dasar, tetapi saya tidak akan membahasnya. Pelajarannya sudah cukup panjang, tapi saya juga ingin menunjukkan beberapa trik dengan cURL.

Tips dan trik cURL

cURL dan menerima cookie selain CURLOPT_COOKIEJAR

Saya rasa sudah jelas bahwa cURL menangani cookie dengan benar - menyimpannya, menggunakannya saat server memintanya, dll. Namun terkadang cookie perlu disimpan. Ada opsi untuk ini yang disebut CURLOPT_COOKIEJAR, tetapi tidak selalu memungkinkan untuk menggunakannya. Untuk inilah trik pertama kami didedikasikan.

Terkadang, karena cara PHP dikonfigurasi di server, opsi seperti CURLOPT_COOKIEJAR (memungkinkan Anda menyimpan cookie yang diterima ke file) dan CURLOPT_COOKIEFILE (memungkinkan Anda menggunakan cookie dari file) tidak tersedia bagi kami. Karena mereka mengatakan bahwa dengan menggunakan opsi ini kita dapat mencuri file apa pun dari server mereka. Inilah solusi untuk masalah ini:

1) Kami tidak menggunakan CURLOPT_FOLLOWLOCATION
2) Gunakan curl_setopt($ch, CURLOPT_HEADER, 1)
3) Kumpulkan cookie dari header seperti ini:

Preg_match_all("|Set-Cookie: (.*);|U", $konten, $hasil); $kue = meledak(";", $hasil);

4) Atur menggunakan curl_setopt($ch, CURLOPT_COOKIE, $cookies);

Tip kedua. Kita bisa berubah dari penyerang menjadi korban. Untuk menghindari menjadi korban serangan man-in-the-middle, kami melakukan hal ini.

Tolong semuanya, hentikan pengaturan CURLOPT_SSL_VERIFYPEER ke false atau 0. Jika instalasi PHP Anda tidak memiliki kumpulan sertifikat root CA terbaru, unduh satu dari situs web curl dan simpan ke server Anda:

Tersembunyi dari tamu

Kemudian atur path pada file php.ini Anda, misalnya di Windows:

Curl.cainfo=c:phpcacert.pem

Menonaktifkan CURLOPT_SSL_VERIFYPEER memungkinkan terjadinya serangan man-in-the-middle (MITM), yang tidak kami inginkan!

Nah, tip terakhir untuk hari ini. Tahukah Anda bahwa sejumlah besar permintaan ikal asinkron dapat dilakukan?

Untuk ini, Anda dapat menggunakan curl_multi_init. Detail dan contoh kode di dokumentasi resmi

Tersembunyi dari tamu

Tersembunyi dari tamu


Tentang cURL di baris perintah

Tersembunyi dari tamu


Bagian kedua dari pelajaran cURL juga telah disiapkan untuk dibaca dalam bahasa Rusia: "".

Artikel ini mengasumsikan bahwa Anda mengetahui dasar-dasar jaringan dan HTML.

Kemampuan menulis skrip sangat penting untuk membangun sistem komputer yang baik. Ekstensibilitas sistem Unix dengan skrip shell dan berbagai program yang menjalankan perintah otomatis adalah salah satu alasan mengapa sistem tersebut begitu sukses.

Semakin banyaknya aplikasi yang berpindah ke web menyebabkan topik skrip HTTP menjadi semakin populer. Tugas penting di area ini adalah mengambil informasi secara otomatis dari Internet, mengirim atau mengunduh data ke server web, dll.

Curl adalah alat baris perintah yang memungkinkan Anda melakukan berbagai jenis manipulasi dan transfer URL. Artikel ini berfokus pada pembuatan permintaan HTTP sederhana. Diasumsikan Anda sudah tahu di mana harus mengetik

# keriting --membantu

# keriting --manual

untuk informasi tentang ikal.

Curl bukanlah alat yang akan melakukan segalanya untuk Anda. Itu membuat permintaan, menerima data, dan mengirim data. Anda mungkin memerlukan semacam "lem" untuk menyatukan semuanya, mungkin beberapa bahasa skrip (seperti bash) atau beberapa panggilan manual.

1. Protokol HTTP

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

HTTP adalah rangkaian teks ASCII yang dikirim dari klien ke server untuk meminta beberapa tindakan. Ketika permintaan diterima, server merespons klien dengan beberapa baris teks layanan, dan kemudian dengan konten sebenarnya.

Dengan menggunakan tombol curl -v, Anda dapat melihat perintah apa yang dikirimkan curl ke server, serta teks informasi lainnya. Sakelar -v mungkin merupakan satu-satunya cara untuk men-debug atau bahkan memahami interaksi antara curl dan server web.

2. URL

Format URL (Uniform Resource Locator) menentukan alamat sumber daya tertentu di Internet. Anda mungkin mengetahui ini, contoh URL: http://curl.haxx.se atau https://yourbank.com.

3. Dapatkan (GET) halaman

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

# keriting http://curl.haxx.se

Anda akan mendapatkan keluaran halaman web ke jendela terminal Anda. Dokumen HTML lengkap terdapat di URL ini.

Semua respons HTTP berisi sekumpulan header yang biasanya tersembunyi. Untuk melihatnya bersama dengan dokumen itu sendiri, gunakan tombol curl -i. Anda juga dapat meminta header saja menggunakan tombol -I (yang akan memaksa curl untuk membuat permintaan HEAD).

4. Bentuk

Formulir adalah cara dasar untuk menampilkan situs web sebagai halaman HTML dengan kolom di mana pengguna memasukkan data dan kemudian mengklik tombol "OK" atau "Kirim", setelah itu data dikirim ke server. Server kemudian menggunakan data yang diterima dan memutuskan apa yang harus dilakukan selanjutnya: mencari informasi di database, menampilkan alamat yang dimasukkan pada peta, menambahkan pesan kesalahan, atau menggunakan informasi tersebut untuk mengautentikasi pengguna. Tentu saja, ada beberapa program di sisi server yang menerima data Anda.

4.1 DAPATKAN

Formulir GET menggunakan metode GET, contohnya seperti ini:

Jika Anda membuka kode ini di browser Anda, Anda akan melihat formulir dengan kolom teks dan tombol bertuliskan "OK". Jika Anda memasukkan "1905" dan mengklik OK, browser akan membuat URL baru yang akan diikutinya. URL akan direpresentasikan sebagai string yang terdiri dari jalur URL sebelumnya dan string seperti "junk.cgi?birthyear=1905&press=OK".

Misalnya, jika formulir terletak di "www.hotmail.com/when/birth.html", maka mengklik OK akan membawa Anda ke URL "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK " .

Kebanyakan mesin pencari bekerja dengan cara ini.

Agar curl menghasilkan permintaan GET, cukup masukkan apa yang Anda harapkan dari formulir:

# curl "www.hotmail.com/when/junk.cgi?birthyear=1905&press=OK"

4.2 POSTINGAN

Metode GET menyebabkan semua informasi yang dimasukkan muncul di bilah alamat browser Anda. Ini mungkin bagus ketika Anda perlu mem-bookmark suatu halaman, namun jelas merupakan kerugian ketika Anda memasukkan informasi sensitif ke dalam kolom formulir, atau ketika jumlah informasi yang dimasukkan ke dalam kolom terlalu besar (mengakibatkan URL tidak dapat dibaca).

Protokol HTTP menyediakan metode POST. Dengan itu, klien mengirimkan data secara terpisah dari URL dan oleh karena itu Anda tidak akan melihatnya di bilah alamat.

Formulir yang menghasilkan permintaan POST mirip dengan yang sebelumnya:

Curl dapat menghasilkan permintaan POST dengan data yang sama sebagai berikut:

# curl -d "birthyear=1905&press=%20OK%20" www.hotmail.com/when/junk.cgi

Permintaan POST ini menggunakan "Aplikasi Tipe Konten/x-www-form-urlencoded", yang merupakan metode yang paling banyak digunakan.

Data yang Anda kirim ke server harus dikodekan dengan benar, curl tidak akan melakukan ini untuk Anda. Misalnya, jika Anda ingin data berisi spasi, Anda perlu mengganti spasi dengan %20, dst. Kurangnya perhatian terhadap masalah ini adalah kesalahan umum yang menyebabkan data tidak ditransfer sebagaimana mestinya.

Pada tahun 1995, cara tambahan untuk mentransfer data melalui HTTP telah ditentukan. Ini didokumentasikan dalam RFC 1867, jadi metode ini kadang-kadang disebut posting RFC1867.

Metode ini terutama dirancang untuk mendukung pengunggahan file dengan lebih baik. Formulir yang memungkinkan pengguna mengunggah file terlihat seperti ini dalam HTML:

Perhatikan bahwa Tipe Konten diatur ke multipart/form-data.

Untuk mengirim data ke formulir ini menggunakan curl, masukkan perintah:

# curl -F unggah=@namafile lokal -F tekan=OK

4.4 Bidang tersembunyi

Cara umum untuk menyampaikan informasi keadaan dalam aplikasi HTML adalah dengan menggunakan bidang tersembunyi dalam formulir. Bidang tersembunyi tidak diisi, tidak terlihat oleh pengguna dan dikirimkan dengan cara yang sama seperti bidang biasa.

Contoh sederhana formulir dengan satu bidang terlihat, satu bidang tersembunyi, dan tombol OK:

Untuk mengirim permintaan POST menggunakan curl, Anda tidak perlu memikirkan apakah bidang tersebut disembunyikan atau tidak. Untuk curl semuanya sama:

# curl -d "tahun kelahiran=1905&tekan=OK&orang=daniel"

4.5 Cari tahu seperti apa permintaan POST

Saat Anda ingin mengisi formulir dan mengirim data ke server menggunakan curl, Anda mungkin ingin permintaan POST terlihat sama persis dengan yang dibuat menggunakan browser.

Cara mudah untuk melihat permintaan POST Anda adalah dengan menyimpan halaman HTML dengan formulir ke disk, ubah metode menjadi GET, dan klik tombol "Kirim" (Anda juga dapat mengubah URL tujuan pengiriman data).

Anda akan melihat data yang dilampirkan ke URL, dipisahkan dengan karakter "?", seperti yang diharapkan saat menggunakan formulir GET.

5. TETAPKAN

Mungkin cara terbaik untuk mengunggah data ke server HTTP adalah dengan menggunakan PUT. Sekali lagi, ini memerlukan program (skrip) di bagian belakang yang mengetahui apa yang harus dilakukan dan bagaimana menerima aliran HTTP PUT.

Kirim file ke server menggunakan curl:

# curl -T unggah file www.uploadhttp.com/receive.cgi

6. Otentikasi

Otentikasi - meneruskan nama pengguna dan kata sandi ke server, setelah itu memeriksa apakah Anda memiliki hak untuk menyelesaikan permintaan yang diperlukan. Otentikasi dasar (yang digunakan curl secara default) didasarkan pada teks biasa, yang berarti bahwa nama pengguna dan kata sandi tidak akan dienkripsi, tetapi hanya sedikit "dikaburkan" dengan algoritme Base64, sehingga memungkinkan penyerang berada di jalur antara Anda dan Anda untuk cari tahu informasi ini server HTTP.

Memberitahu curl untuk menggunakan nama pengguna dan kata sandi:

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

Situs mungkin memerlukan penggunaan metode otentikasi yang berbeda (lihat apa yang ditulis server di header), dalam kasus ini Anda dapat menggunakan sakelar --ntlm, --digest, --negotiate, atau bahkan --anyuth. Terkadang akses ke server HTTP eksternal terjadi melalui proxy, hal ini sering dilakukan di perusahaan dan firma. Proksi HTTP mungkin memerlukan nama pengguna dan kata sandi Anda sendiri untuk mengakses Internet. Kunci ikal yang sesuai:

# curl -U pengguna proxy: kata sandi proxy curl.haxx.se

Jika proxy memerlukan otentikasi menggunakan metode NTLM, tentukan --proxy-ntlm, jika metode Digest, maka --proxy-digest.

Jika Anda tidak menentukan kata sandi di opsi -u dan -U, maka curl akan menanyakannya secara interaktif.

Perhatikan bahwa ketika curl berjalan, string startup (dan dengan itu kunci dan kata sandi) mungkin terlihat oleh pengguna lain di sistem Anda dalam daftar tugas. Ada cara untuk mencegah hal ini. Lebih lanjut tentang ini di bawah.

7. Perujuk

Permintaan HTTP mungkin menyertakan bidang "referensi", yang menunjukkan dari URL mana pengguna datang ke sumber daya ini. Beberapa program/skrip memeriksa kolom "referer" dan tidak menjalankan permintaan jika pengguna berasal dari halaman yang tidak dikenal. Meskipun ini adalah cara yang bodoh untuk memeriksanya, banyak skrip yang masih menggunakannya. Dengan curl Anda dapat meletakkan apa pun di bidang "referensi" dan membuatnya melakukan apa yang Anda inginkan.

Ini dilakukan sebagai berikut:

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

8. Agen Pengguna

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

Terkadang Anda mungkin menemukan bahwa curl mengembalikan halaman yang tidak sama dengan yang Anda lihat di browser Anda. Dalam hal ini, sebaiknya gunakan kolom "Agen Pengguna" untuk sekali lagi menipu server.

Menyamarkan curl sebagai Internet Explorer pada mesin Windows 2000:

# curl -A "Mozilla/4.0 (kompatibel; MSIE 5.01; Windows NT 5.0)"

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

# curl -A "Mozilla/4.73 (X11; U; Linux 2.2.15 i686)"

9. Pengalihan

Saat merespons permintaan Anda, server mungkin mengembalikan indikasi ke mana browser harus pergi selanjutnya untuk sampai ke halaman yang diinginkan, bukan halaman itu sendiri. Header yang memberitahu browser untuk mengalihkan adalah "Lokasi:".

Secara default, curl tidak menuju ke alamat yang ditentukan di "Lokasi:", tetapi hanya menampilkan halaman seperti biasa. Tapi Anda bisa mengarahkannya seperti ini:

# curl -L www.sitethatredirects.com

Jika Anda menggunakan curl untuk membuat permintaan POST ke situs yang segera dialihkan ke halaman lain, Anda dapat menggunakan kombinasi -L dan -d/-F dengan aman. Curl akan menghasilkan permintaan POST untuk halaman pertama, dan kemudian permintaan GET untuk halaman berikutnya.

10. Kue

Dengan cookie, browser web mengontrol status di sisi klien. Cookie adalah nama dengan konten terlampir. Dengan mengirimkan cookie, server memberi tahu klien jalur dan nama host ke mana cookie harus dikirim di lain waktu, masa pakai cookie, dan beberapa parameter lainnya.

Ketika klien terhubung ke server di alamat yang ditentukan dalam cookie yang diterima, klien mengirimkan cookie tersebut ke server (jika masa pakainya belum berakhir).

Banyak aplikasi dan server menggunakan metode ini untuk menggabungkan beberapa permintaan menjadi satu sesi logis. Agar curl juga dapat menjalankan fungsi ini, kita harus dapat menyimpan dan mengirim cookie, seperti yang dilakukan browser.

Cara paling sederhana untuk mengirim cookie ke server saat menerima halaman menggunakan curl adalah dengan menambahkan saklar yang sesuai pada baris perintah:

# curl -b "nama=Daniel" www.cookiesite.com

Cookie dikirim sebagai header HTTP biasa. Hal ini memungkinkan curl untuk menyimpan cookie dengan mempertahankan header. Menyimpan cookie menggunakan curl dilakukan dengan perintah:

# curl -D headers_and_cookies www.cookiesite.com

(omong-omong, untuk menyimpan cookie lebih baik menggunakan tombol -c, lebih lanjut tentang itu di bawah).

curl memiliki pengendali cookie berfitur lengkap, yang berguna ketika Anda ingin terhubung ke server lagi dan menggunakan cookie yang disimpan terakhir kali (atau dimodifikasi secara manual). Untuk menggunakan cookie yang disimpan dalam file, panggil curl seperti ini:

# curl -b disimpan_cookies_in_file www.cookiesite.com

"Mesin cookie" Curl diaktifkan saat Anda menentukan tombol -b. Jika Anda hanya ingin curl menerima cookie, gunakan -b untuk menentukan file yang tidak ada. Misalnya, jika Anda ingin curl menerima cookie dari suatu halaman dan kemudian mengikuti pengalihan (mungkin memberikan cookie yang baru saja diterima), Anda dapat memanggil curl seperti ini:

# curl -b nada -L www.cookiesite.com

Curl dapat membaca dan menulis cookie dalam format Netscape dan Mozilla. Ini adalah cara mudah untuk bertukar cookie antara browser dan skrip otomatis. Tombol -b secara otomatis mendeteksi apakah cookie tertentu adalah cookie dari browser yang ditentukan dan menanganinya sesuai dengan itu, dan menggunakan tombol -c/--cookie-jar Anda dapat memaksa curl untuk menulis cookie baru ketika operasi selesai:

# curl -b cookies.txt -c newcookies.txt www.cookiesite.com

11. HTTPS

Ada beberapa cara untuk mengamankan komunikasi HTTP Anda. Protokol paling terkenal yang memecahkan masalah ini adalah HTTPS, atau HTTP melalui SSL. SSL mengenkripsi semua data yang dikirim dan diterima melalui jaringan, meningkatkan kemungkinan informasi Anda tetap rahasia.

Curl mendukung permintaan ke server HTTPS menggunakan perpustakaan OpenSSL gratis. Permintaan terjadi dengan cara biasa:

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

11.1 Sertifikat

Di dunia HTTPS, Anda menggunakan sertifikat selain nama pengguna dan kata sandi untuk autentikasi. Curl mendukung sertifikat sisi klien. Semua sertifikat dikunci dengan frasa sandi yang harus Anda masukkan sebelum curl dapat mulai bekerja dengannya. Frasa sandi dapat ditentukan pada baris perintah atau dimasukkan secara interaktif. Sertifikat dalam curl digunakan sebagai berikut:

# curl -E mycert.pem https://that.secure.server.com

Curl juga memverifikasi keaslian server dengan memeriksa sertifikat server terhadap sertifikat yang disimpan secara lokal. Jika ada perbedaan, curl akan menolak untuk terhubung. Untuk mengabaikan pemeriksaan autentikasi, gunakan tombol -k.

Informasi lebih lanjut tentang sertifikat dapat ditemukan di http://curl.haxx.se/docs/sslcerts.html.

12. Header permintaan khusus

Anda mungkin perlu mengubah atau menambahkan elemen permintaan ikal individual.

Misalnya, Anda dapat mengubah permintaan POST menjadi PROPFIND dan mengirim data sebagai "Tipe Konten: teks/xml" (bukan Tipe Konten normal):

# keriting -d " " -H "Tipe Konten: teks/xml" -X PROPFIND url.com

Anda dapat menghapus judul dengan menentukannya tanpa konten. Misalnya, Anda dapat menghapus header "Host:", sehingga membuat permintaan menjadi "kosong":

# curl -H "Host:" http://mysite.com

Anda juga dapat menambahkan judul. Server Anda mungkin memerlukan header "Tujuan:":

# curl -H "Tujuan: http://moo.com/nowhere" http://url.com

13. Men-debug

Sering terjadi bahwa situs merespons permintaan curl secara berbeda dibandingkan permintaan browser. Dalam hal ini, Anda perlu membuat curl semirip mungkin dengan browser:

  • Gunakan sakelar --trace-ascii untuk menyimpan catatan kueri secara mendetail sehingga Anda dapat memeriksanya secara mendetail dan memahami masalahnya.
  • Pastikan Anda memeriksa cookie dan menggunakannya jika perlu (baca -b dan simpan -c)
  • Tentukan salah satu browser populer terbaru di bidang "agen-pengguna".
  • Isi kolom "referer" seperti yang dilakukan browser
  • Jika Anda menggunakan permintaan POST, pastikan semua kolom dikirim dalam urutan yang sama seperti browser (lihat poin 4.5 di atas)

Penolong yang baik dalam tugas sulit ini adalah plugin LiveHTTPHeader untuk Mozilla/Firefox, yang memungkinkan Anda melihat semua header yang dikirim dan diterima browser ini (bahkan saat menggunakan HTTPS).

Pendekatan tingkat rendah adalah menangkap lalu lintas HTTP di jaringan menggunakan program seperti ethereal atau tcpdump, dan kemudian menganalisis header apa yang diterima dan dikirim oleh browser (HTTPS membuat pendekatan ini tidak efektif).

RFC 2616 wajib dibaca oleh siapa saja yang ingin memahami protokol HTTP.

RFC 2396 menjelaskan sintaks URL.

RFC 2109 mendefinisikan cara kerja cookie.

RFC 1867 mendefinisikan format File Upload Posting.

http://openssl.planetmirror.com - beranda proyek OpenSSL

http://curl.haxx.se - beranda proyek cURL

Kehidupan seorang web developer dibayangi oleh kesulitan. Hal ini sangat tidak menyenangkan bila sumber kesulitan ini tidak diketahui. Apakah ini masalah dengan pengiriman permintaan, atau dengan respons, atau dengan perpustakaan pihak ketiga, atau apakah API eksternal bermasalah? Ada banyak gadget berbeda yang dapat membuat hidup kita lebih mudah. Berikut adalah beberapa alat baris perintah yang menurut saya pribadi sangat berharga.

keriting
cURL adalah program untuk mentransfer data melalui berbagai protokol, mirip dengan wget. Perbedaan utamanya adalah secara default wget menyimpan ke file, sedangkan cURL menghasilkan output ke baris perintah. Ini membuatnya sangat mudah untuk melihat konten situs web. Misalnya, berikut cara cepat mendapatkan IP eksternal Anda saat ini:

$ikal ifconfig.me 93.96.141.93
Pilihan -Saya(tunjukkan judul) dan -SAYA(hanya tampilkan header) jadikan cURL alat yang luar biasa untuk men-debug respons HTTP dan menganalisis apa sebenarnya yang dikirimkan server kepada Anda:

$ curl -I habrahabr.ru HTTP/1.1 200 OK Server: nginx Tanggal: Kam, 18 Agustus 2011 14:15:36 GMT Tipe Konten: teks/html; charset=utf-8 Koneksi: tetap hidup Tetap hidup: batas waktu=25
Parameter -L Juga berguna, ini memaksa cURL untuk mengikuti pengalihan secara otomatis. cURL mendukung otentikasi HTTP, cookie, tunneling melalui proxy HTTP, pengaturan manual di header, dan masih banyak lagi.

Pengepungan
Siege adalah alat pengujian beban. Selain itu, ia memiliki pilihan yang nyaman -G, yang sangat mirip dengan keriting –iL, tetapi selain itu juga menampilkan header permintaan http. Berikut ini contoh dari google.com (beberapa judul dihapus agar singkatnya):

$ pengepungan -g www.google.com GET / HTTP/1.1 Host: www.google.com Agen-Pengguna: JoeDog/1.00 (X11; I; Siege 2.70) Koneksi: tutup HTTP/1.1 302 Lokasi Ditemukan: http:// www.google.co.uk/ Tipe Konten: text/html; charset=UTF-8 Server: gws Panjang Konten: 221 Koneksi: close GET / HTTP/1.1 Host: www.google.co.uk Agen-Pengguna: JoeDog/1.00 (X11; I; Siege 2.70) Koneksi: close HTTP/ 1.1 200 OK Tipe Konten: teks/html; charset=ISO-8859-1 X-XSS-Perlindungan: 1; mode=blok Koneksi: tutup
Namun keunggulan Siege adalah pengujian beban. Seperti patokan Apache ab, ia dapat mengirim banyak permintaan paralel ke situs dan melihat cara menangani lalu lintas. Contoh berikut menunjukkan bagaimana kami menguji Google dengan 20 query selama 30 detik dan kemudian mencetak hasilnya:

$ pengepungan -c20 www.google.co.uk -b -t30s ... Mengangkat pengepungan server... selesai. Transaksi: 1400 hits Ketersediaan: 100,00 % Waktu yang berlalu: 29,22 detik Data yang ditransfer: 13,32 MB Waktu respons: 0,41 detik Kecepatan transaksi: 47,91 trans/detik Throughput: 0,46 MB/detik Konkurensi: 19,53 Transaksi berhasil: 1400 Transaksi gagal: 0 Transaksi terlama: 4.08 Transaksi terpendek: 0.08
Salah satu fitur Siege yang paling berguna adalah ia dapat bekerja tidak hanya dengan satu alamat, tetapi juga dengan daftar URL dari sebuah file. Ini bagus untuk pengujian beban karena Anda dapat menyimulasikan lalu lintas situs sebenarnya daripada hanya mengunjungi URL yang sama berulang kali. Misalnya, berikut cara menggunakan Siege untuk memuat server menggunakan alamat dari log Apache Anda:

$ potong -d " " -f7 /var/log/apache2/access.log > urls.txt $ pengepungan -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 hiu. Namun untuk tugas sederhana, saya menganggap fungsionalitas Wireshark berlebihan. Jadi, kecuali saya membutuhkan senjata yang ampuh, saya menggunakan . Ini memungkinkan Anda melakukan hal yang sama dengan paket jaringan seperti memahami lakukan dengan file.

Untuk lalu lintas web, Anda hampir selalu ingin menggunakan parameter tersebut -W untuk mempertahankan pemformatan string serta opsi -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 "^(GET|POST) .*"
Anda dapat menambahkan filter tambahan untuk paket, misalnya berdasarkan host, alamat IP, atau port tertentu. Berikut adalah filter untuk semua lalu lintas ke dan dari google.com, port 80, yang berisi kata “pencarian”.

Ngrep -q -W byline "cari" host www.google.com dan port 80