Skip to content Skip to sidebar Skip to footer

Seni Membuat Skrip Permintaan HTTP Menggunakan Curl

Seni Membuat Skrip Permintaan HTTP Menggunakan Curl




Latar belakang

imofrok.my.id , Dokumen ini mengasumsikan bahwa Anda sudah familiar dengan HTML dan jaringan umum.



Meningkatnya jumlah aplikasi yang berpindah ke web membuat "HTTP Scripting" semakin sering diminta dan diinginkan. Untuk dapat mengekstrak informasi secara otomatis dari web, memalsukan pengguna, memposting atau mengunggah data ke server web, semuanya merupakan tugas penting saat ini.



Curl adalah alat baris perintah untuk melakukan segala macam manipulasi dan transfer URL, namun dokumen khusus ini akan fokus pada cara menggunakannya saat melakukan permintaan HTTP untuk kesenangan dan keuntungan. Dokumen ini mengasumsikan bahwa Anda mengetahui cara memanggil curl --help atau curl --manual untuk mendapatkan informasi dasar tentangnya.



Curl tidak ditulis untuk melakukan segalanya untuk Anda. Ia membuat permintaan, mendapatkan data, mengirimkan data, dan mengambil informasi. Anda mungkin perlu merekatkan semuanya menggunakan semacam bahasa skrip atau pemanggilan manual berulang kali.



Protokol HTTP

HTTP adalah protokol yang digunakan untuk mengambil data dari server web. Ini adalah protokol sederhana yang dibangun di atas TCP/IP. Protokol ini juga memungkinkan informasi dikirim ke server dari klien menggunakan beberapa metode berbeda, seperti yang akan ditunjukkan di sini.



HTTP adalah baris teks ASCII biasa yang dikirim oleh klien ke server untuk meminta tindakan tertentu, dan kemudian server membalas beberapa baris teks sebelum konten sebenarnya yang diminta dikirim ke klien.



Klien, curl, mengirimkan permintaan HTTP. Permintaan berisi metode (seperti GET, POST, HEAD, dll), sejumlah header permintaan, dan terkadang isi permintaan. Server HTTP merespons dengan baris status (menunjukkan apakah semuanya berjalan baik), header respons, dan paling sering juga isi respons. Bagian "tubuh" adalah data biasa yang Anda minta, seperti HTML sebenarnya atau gambar, dll.



Lihat Protokol

Menggunakan opsi curl --verbose (-v sebagai opsi singkat) akan menampilkan jenis perintah yang dikirimkan curl ke server, serta beberapa teks informasi lainnya.



--verbose adalah satu-satunya opsi yang paling berguna saat melakukan debug atau bahkan memahami interaksi curl<->server.



Terkadang bahkan --verbose saja tidak cukup. Kemudian --trace dan --trace-ascii menawarkan lebih banyak detail saat mereka menunjukkan semua yang dikirim dan diterima oleh curl. Gunakan seperti ini:



curl --trace-ascii debugdump.txt http://www.example.com/

Lihat Waktunya

Seringkali Anda mungkin bertanya-tanya apa sebenarnya yang memakan waktu, atau Anda hanya ingin mengetahui jumlah milidetik antara dua titik dalam suatu transfer. Untuk situasi tersebut, dan situasi serupa lainnya, opsi --trace-time adalah yang Anda perlukan. Ini akan menambahkan waktu ke setiap jalur keluaran jejak:



curl --trace-ascii d.txt --trace-time http://example.com/

Lihat Transfer yang mana

Saat melakukan transfer paralel, penting untuk melihat transfer mana yang melakukan apa. Ketika header respons diterima (dan dicatat), Anda perlu mengetahui tujuan transfernya. Opsi --trace-ids adalah yang Anda butuhkan. Ini akan menambahkan pengidentifikasi transfer dan koneksi ke setiap jalur keluaran jejak:



curl --trace-ascii d.txt --trace-ids http://example.com/

Lihat Responnya

Secara default curl mengirimkan respons ke stdout. Anda perlu mengarahkannya ke suatu tempat untuk menghindari hal itu, paling sering dilakukan dengan -o atau -O.



URL

Spesifikasi

Format Uniform Resource Locator adalah cara Anda menentukan alamat sumber daya tertentu di Internet. Anda tahu ini, Anda telah melihat URL seperti https://curl.se atau https://example.com jutaan kali. RFC 3986 adalah spesifikasi kanonik. Dan ya, nama resminya bukanlah URL, melainkan URI.



Tuan rumah

Nama host biasanya diselesaikan menggunakan DNS atau file /etc/hosts Anda ke alamat IP dan dengan itulah curl akan berkomunikasi. Alternatifnya, Anda menentukan alamat IP langsung di URL, bukan nama.



Untuk situasi pengembangan dan uji coba lainnya, Anda dapat menunjuk ke alamat IP yang berbeda untuk nama host daripada yang biasa digunakan, dengan menggunakan opsi --resolve curl:



curl --resolve www.example.org:80:127.0.0.1 http://www.example.org/

Nomor pelabuhan

Setiap protokol yang didukung curl beroperasi pada nomor port default, baik melalui TCP atau dalam beberapa kasus UDP. Biasanya Anda tidak perlu mempertimbangkan hal itu, tetapi terkadang Anda menjalankan server pengujian pada port lain atau serupa. Kemudian Anda dapat menentukan nomor port di URL dengan titik dua dan nomor tepat setelah nama host. Seperti saat melakukan HTTP ke port 1234:



keriting http://www.example.org:1234/

Nomor port yang Anda tentukan di URL adalah nomor yang digunakan server untuk menawarkan layanannya. Terkadang Anda mungkin menggunakan proksi, dan kemudian Anda mungkin perlu menentukan nomor port proksi tersebut secara terpisah dari apa yang diperlukan curl untuk terhubung ke server. Seperti saat menggunakan proxy HTTP pada port 4321:



curl --proxy http://proxy.example.org:4321 http://remote.example.org/

Nama pengguna dan kata sandi

Beberapa layanan diatur untuk memerlukan otentikasi HTTP dan kemudian Anda perlu memberikan nama dan kata sandi yang kemudian ditransfer ke situs jarak jauh dengan berbagai cara tergantung pada protokol otentikasi yang digunakan.



Anda dapat memilih untuk memasukkan pengguna dan kata sandi ke dalam URL atau Anda dapat memberikannya secara terpisah:



keriting http://pengguna:kata sandi@example.org/

atau



curl -u pengguna:kata sandi http://example.org/

Anda perlu memperhatikan bahwa otentikasi HTTP semacam ini bukanlah yang biasanya dilakukan dan diminta oleh situs web berorientasi pengguna saat ini. Mereka cenderung menggunakan formulir dan cookie.



Bagian jalur

Bagian jalur baru saja dikirim ke server untuk memintanya mengirimkan kembali respons terkait. Jalurnya berada di sisi kanan garis miring yang mengikuti nama host dan mungkin nomor port.



Ambil halaman

MENDAPATKAN

Permintaan/operasi paling sederhana dan umum yang dilakukan menggunakan HTTP adalah MENDAPATKAN URL. URL itu sendiri bisa merujuk ke halaman web, gambar, atau file. Klien mengeluarkan permintaan GET ke server dan menerima dokumen yang diminta. Jika Anda mengeluarkan baris perintah



keriting https://curl.se

Anda mendapatkan halaman web kembali di jendela terminal Anda. Seluruh dokumen HTML yang disimpan oleh URL tersebut.



Semua balasan HTTP berisi sekumpulan header respons yang biasanya tersembunyi, gunakan opsi --include (-i) curl untuk menampilkannya serta seluruh dokumen.



KEPALA

Anda dapat meminta HANYA header ke server jarak jauh dengan menggunakan opsi --head (-I) yang akan membuat curl mengeluarkan permintaan HEAD. Dalam beberapa kasus khusus, server menolak metode HEAD sementara yang lain masih berfungsi, yang merupakan jenis gangguan tertentu.



Metode HEAD didefinisikan dan dibuat sehingga server mengembalikan header persis seperti yang dilakukannya untuk GET, tetapi tanpa isi. Artinya Anda mungkin melihat Content-Length: di header respons, namun tidak boleh ada isi sebenarnya di respons HEAD.



Beberapa URL dalam satu baris perintah

Satu baris perintah curl mungkin melibatkan satu atau banyak URL. Kasus paling umum mungkin hanya menggunakan satu URL, namun Anda dapat menentukan jumlah URL berapa pun. Ya, apa pun. Tanpa batas. Anda kemudian akan mendapatkan permintaan berulang-ulang untuk semua URL yang diberikan.



Contoh, kirim dua permintaan GET:



keriting http://url1.example.com http://url2.example.com

Jika Anda menggunakan --data untuk POST ke URL, menggunakan beberapa URL berarti Anda mengirim POST yang sama ke semua URL yang diberikan.



Contoh, kirim dua POST:



curl --nama data=curl http://url1.example.com http://url2.example.com

Beberapa metode HTTP dalam satu baris perintah

Terkadang Anda perlu mengoperasikan beberapa URL dalam satu baris perintah dan melakukan metode HTTP yang berbeda pada masing-masing URL. Untuk ini, Anda akan menikmati opsi --next. Ini pada dasarnya adalah pemisah yang memisahkan sekumpulan opsi dari opsi berikutnya. Semua URL sebelum --next akan mendapatkan metode yang sama dan semua data POST akan digabungkan menjadi satu.



Ketika curl mencapai --next pada baris perintah, itu akan mengatur ulang metode dan data POST dan mengizinkan set baru.



Mungkin hal ini paling baik ditunjukkan dengan beberapa contoh. Untuk mengirim HEAD terlebih dahulu dan kemudian GET:



curl -I http://example.com --berikutnya http://example.com

Untuk mengirim POST terlebih dahulu dan kemudian GET:



curl -d score=10 http://example.com/post.cgi --selanjutnya http://example.com/results.html

formulir HTML

Formulir dijelaskan

Formulir adalah cara umum situs web menampilkan halaman HTML dengan kolom bagi pengguna untuk memasukkan data, lalu menekan semacam tombol 'OK' atau 'Kirim' agar data tersebut dikirim ke server. Server kemudian biasanya menggunakan data yang diposting untuk memutuskan bagaimana harus bertindak. Seperti menggunakan kata-kata yang dimasukkan untuk mencari di database, atau untuk menambahkan info dalam sistem pelacakan bug, menampilkan alamat yang dimasukkan pada peta atau menggunakan info tersebut sebagai perintah masuk untuk memverifikasi bahwa pengguna diizinkan untuk melihat tentang apa itu. untuk melihat.



Tentu saja harus ada semacam program di server untuk menerima data yang Anda kirim. Anda tidak bisa menciptakan sesuatu begitu saja.



MENDAPATKAN

Formulir GET menggunakan metode GET, seperti yang ditentukan dalam HTML seperti:



<formulir metode="GET" action="junk.cgi">

  <tipe input=nama teks="tahun lahir">

  <tipe input=kirim nama=tekan value="OK">

</bentuk>

Di browser favorit Anda, formulir ini akan muncul dengan kotak teks yang harus diisi dan tombol tekan berlabel "OK". Jika Anda mengisi '1905' dan menekan tombol OK, browser Anda akan membuat URL baru untuk Anda. URL akan ditambahkan junk.cgi?birthyear=1905&press=OK ke bagian jalur dari URL sebelumnya.



Jika formulir aslinya terlihat pada halaman www.example.com/when/birth.html, maka halaman kedua yang Anda dapatkan akan menjadi www.example.com/when/junk.cgi?birthyear=1905&press=OK.



Kebanyakan mesin pencari bekerja dengan cara ini.



Untuk membuat curl melakukan posting formulir GET untuk Anda, cukup masukkan URL yang diharapkan dibuat:



ikal "http://www.example.com/when/junk.cgi?birthyear=1905&press=OK"

POS

Metode GET membuat semua nama kolom masukan ditampilkan di kolom URL browser Anda. Hal ini biasanya merupakan hal yang baik bila Anda ingin dapat menandai halaman tersebut dengan data yang Anda berikan, namun jelas merupakan kerugian jika Anda memasukkan informasi rahasia di salah satu kolom atau jika ada banyak kolom yang membuat kolom panjang dan panjang. URL yang tidak dapat dibaca.



Protokol HTTP kemudian menawarkan metode POST. Dengan cara ini klien mengirimkan data terpisah dari URL dan dengan demikian Anda tidak akan melihatnya di bidang alamat URL.



Bentuknya akan terlihat mirip dengan yang sebelumnya:



<formulir metode="POST" action="junk.cgi">

  <tipe input=nama teks="tahun lahir">

  <tipe input=kirim nama=tekan value=" OK ">

</bentuk>

Dan untuk menggunakan curl untuk memposting formulir ini dengan pengisian data yang sama seperti sebelumnya, kita dapat melakukannya seperti:



curl --data "tahun kelahiran=1905&press=%20OK%20" http://www.example.com/when/junk.cgi

POST jenis ini akan menggunakan aplikasi Content-Type/x-www-form-urlencoded dan merupakan jenis POST yang paling banyak 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 spasi tersebut dengan %20, dll. Gagal mematuhi hal ini kemungkinan besar akan menyebabkan data Anda diterima salah dan kacau.



Versi curl terbaru sebenarnya dapat menyandikan data POST dengan url untuk Anda, seperti ini:



curl --data-urlencode "nama=Saya Daniel" http://www.example.com

Jika Anda mengulangi --data beberapa kali pada baris perintah, curl akan menggabungkan semua potongan data yang diberikan - dan meletakkan simbol & di antara setiap segmen data.



Unggah File POSTINGAN

Pada akhir tahun 1995 mereka mendefinisikan cara tambahan untuk mengirim data melalui HTTP. Hal ini didokumentasikan dalam RFC 1867, mengapa metode ini kadang-kadang disebut sebagai posting RFC 1867.



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



<form method="POST" enctype='multipart/form-data' action="upload.cgi">

  <tipe masukan=nama file=unggah>

  <tipe input=kirim nama=tekan value="OK">

</bentuk>

Hal ini jelas menunjukkan bahwa Content-Type yang akan dikirim adalah multipart/form-data.



Untuk memposting ke formulir seperti ini dengan curl, Anda memasukkan baris perintah seperti:



curl --form upload=@namafilelokal --form tekan=OK [URL]

Bidang Tersembunyi

Cara umum bagi aplikasi berbasis HTML untuk meneruskan informasi status antar halaman adalah dengan menambahkan bidang tersembunyi ke formulir. Bidang tersembunyi sudah diisi, tidak ditampilkan kepada pengguna dan diteruskan sama seperti bidang lainnya.



Contoh formulir serupa dengan satu bidang terlihat, satu bidang tersembunyi, dan satu tombol kirim akan terlihat seperti:



<formulir metode="POST" action="foobar.cgi">

  <tipe input=nama teks="tahun lahir">

  <tipe masukan=nama tersembunyi='orang' nilai='daniel'>

  <tipe input=kirim nama="tekan" value="OK">

</bentuk>

Untuk POST ini dengan curl, Anda tidak perlu memikirkan apakah kolomnya disembunyikan atau tidak. Untuk mengeriting semuanya sama:



curl --data "tahun lahir=1905&tekan=OK&orang=daniel" [URL]

Cari Tahu Seperti Apa Postingannya

Saat Anda hendak mengisi formulir dan mengirimkannya ke server dengan menggunakan curl alih-alih browser, Anda tentu tertarik untuk mengirimkan POST persis seperti yang dilakukan browser Anda.



Cara mudah untuk melihatnya adalah dengan menyimpan halaman HTML dengan formulir di disk lokal Anda, ubah 'metode' menjadi GET, dan tekan tombol kirim (Anda juga dapat mengubah URL tindakan jika Anda mau) .



Anda kemudian akan dengan jelas melihat data ditambahkan ke URL, dipisahkan dengan huruf ?-seperti yang seharusnya dilakukan pada formulir GET.



Unggahan HTTP

MELETAKKAN

Mungkin cara terbaik untuk mengunggah data ke server HTTP adalah dengan menggunakan PUT. Dan lagi, hal ini tentu saja mengharuskan seseorang meletakkan program atau skrip di sisi server yang mengetahui cara menerima aliran HTTP PUT.



Masukkan file ke server HTTP dengan curl:



curl --upload-file uploadfile http://www.example.com/receive.cgi

Otentikasi HTTP

Otentikasi Dasar

Otentikasi HTTP adalah kemampuan untuk memberi tahu server nama pengguna dan kata sandi Anda sehingga dapat memverifikasi bahwa Anda diizinkan untuk melakukan permintaan yang Anda lakukan. Otentikasi dasar yang digunakan dalam HTTP (yang merupakan jenis yang digunakan curl secara default) berbasis teks biasa, yang berarti ia mengirimkan nama pengguna dan kata sandi hanya dengan sedikit dikaburkan, namun masih dapat dibaca sepenuhnya oleh siapa pun yang mengendus jaringan antara Anda dan server jarak jauh.



Untuk memberi tahu curl agar menggunakan pengguna dan kata sandi untuk autentikasi:



curl --nama pengguna:kata sandi http://www.example.com

Otentikasi Lainnya

Situs tersebut mungkin memerlukan metode autentikasi yang berbeda (periksa header yang dikembalikan oleh server), lalu --ntlm, --digest, --negotiate, atau bahkan --anyuth mungkin merupakan opsi yang sesuai untuk Anda.



Otentikasi Proksi

Terkadang akses HTTP Anda hanya tersedia melalui penggunaan proxy HTTP. Hal ini tampaknya umum terjadi di berbagai perusahaan. Proksi HTTP mungkin memerlukan pengguna dan kata sandinya sendiri untuk memungkinkan klien mengakses Internet. Untuk menentukannya dengan curl, jalankan sesuatu seperti:



curl --proxy-pengguna proxyuser:proxypassword curl.se

Jika proxy Anda memerlukan otentikasi menggunakan metode NTLM, gunakan --proxy-ntlm, jika memerlukan Digest gunakan --proxy-digest.



Jika Anda menggunakan salah satu dari opsi pengguna+kata sandi ini tetapi mengabaikan bagian kata sandi, curl akan meminta kata sandi secara interaktif.



Menyembunyikan kredensial

Perhatikan bahwa ketika suatu program dijalankan, parameternya mungkin dapat dilihat saat membuat daftar proses sistem yang sedang berjalan. Dengan demikian, pengguna lain mungkin dapat melihat kata sandi Anda jika Anda meneruskannya sebagai opsi baris perintah biasa. Ada cara untuk menghindari hal ini.



Perlu dicatat bahwa meskipun ini adalah cara kerja Otentikasi HTTP, banyak situs web tidak akan menggunakan konsep ini ketika mereka menyediakan login, dll. Lihat bab Login Web di bawah untuk detail lebih lanjut tentang hal itu.



Lebih Banyak Header HTTP

Merujuk

Permintaan HTTP mungkin menyertakan bidang 'perujuk' (ya, salah eja), yang dapat digunakan untuk mengetahui dari URL mana klien mendapatkan sumber daya tertentu ini. Beberapa program/skrip memeriksa bidang referensi permintaan untuk memverifikasi bahwa ini tidak datang dari situs eksternal atau halaman yang tidak dikenal. Meskipun ini adalah cara bodoh untuk memeriksa sesuatu yang mudah dipalsukan, banyak skrip yang masih melakukannya. Dengan menggunakan curl, Anda dapat memasukkan apa pun yang Anda inginkan ke dalam kolom referensi sehingga lebih mudah mengelabui server agar melayani permintaan Anda.



Gunakan curl untuk mengatur bidang referensi dengan:



curl --referer http://www.example.come http://www.example.com

Agen pengguna

Mirip dengan bidang referensi, semua permintaan HTTP dapat mengatur bidang Agen-Pengguna. Ini menyebutkan agen pengguna (klien) apa yang sedang digunakan. Banyak aplikasi menggunakan informasi ini untuk memutuskan bagaimana menampilkan halaman. Pemrogram web yang konyol mencoba membuat halaman berbeda untuk pengguna browser berbeda agar terlihat sebaik mungkin untuk browser khusus mereka. Mereka biasanya juga melakukan berbagai jenis JavaScript dll.



Terkadang, Anda akan melihat bahwa mendapatkan halaman dengan curl tidak akan mengembalikan halaman yang sama seperti yang Anda lihat saat mendapatkan halaman tersebut dengan browser Anda. Maka Anda tahu sudah waktunya menyetel bidang Agen Pengguna untuk mengelabui server dengan mengira Anda adalah salah satu browser tersebut.



Untuk membuat curl terlihat seperti Internet Explorer 5 pada kotak Windows 2000:



curl --agen-pengguna "Mozilla/4.0 (kompatibel; MSIE 5.01; Windows NT 5.0)" [URL]

Atau mengapa Anda tidak menggunakan Netscape 4.73 pada Linux lama:



curl --agen-pengguna "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" [URL]

Pengalihan

Tajuk lokasi

Ketika sumber daya diminta dari server, balasan dari server mungkin menyertakan petunjuk tentang ke mana browser harus pergi selanjutnya untuk menemukan halaman ini, atau halaman baru yang menyimpan keluaran yang baru dihasilkan. Header yang memberitahu browser untuk mengalihkan adalah Lokasi:.



Curl tidak mengikuti Lokasi: header secara default, tetapi hanya akan menampilkan halaman tersebut dengan cara yang sama seperti menampilkan semua balasan HTTP. Namun ia menampilkan opsi yang akan membuatnya mencoba mengikuti penunjuk Lokasi:.



Untuk memberitahu curl agar mengikuti Lokasi:



curl --lokasi http://www.example.com

Jika Anda menggunakan curl untuk POST ke situs yang segera mengarahkan Anda ke halaman lain, Anda dapat menggunakan --location (-L) dan --data/--form dengan aman secara bersamaan. Curl hanya akan menggunakan POST pada permintaan pertama, dan kemudian kembali ke GET pada operasi berikutnya.



Pengalihan lainnya

Browser biasanya mendukung setidaknya dua cara pengalihan lain yang tidak dimiliki curl: pertama, html mungkin berisi tag penyegaran meta yang meminta browser memuat URL tertentu setelah beberapa detik, atau browser mungkin menggunakan JavaScript untuk melakukannya.



Kue

Dasar-dasar Kue

Cara browser web melakukan "kontrol status sisi klien" adalah dengan menggunakan cookie. Cookie hanyalah nama dengan konten terkait. Cookie dikirim ke klien oleh server. Server memberi tahu klien jalur dan nama host apa yang diinginkan agar cookie dikirim kembali, dan juga mengirimkan tanggal kedaluwarsa dan beberapa properti lainnya.



Ketika klien berkomunikasi dengan server dengan nama dan jalur seperti yang ditentukan sebelumnya dalam cookie yang diterima, klien mengirimkan kembali cookie dan isinya ke server, kecuali tentu saja cookie tersebut telah kedaluwarsa.



Banyak aplikasi dan server menggunakan metode ini untuk menghubungkan serangkaian permintaan ke dalam satu sesi logis. Untuk dapat menggunakan curl pada kesempatan seperti itu, kita harus dapat merekam dan mengirim kembali cookie sesuai yang diharapkan oleh aplikasi web. Cara yang sama browser menanganinya.



Opsi kue

Cara paling sederhana untuk mengirim beberapa cookie ke server ketika mendapatkan halaman dengan curl adalah dengan menambahkannya pada baris perintah seperti:



curl --cookie "nama=Daniel" http://www.example.com

Cookie dikirim sebagai header HTTP umum. Ini praktis karena memungkinkan curl untuk merekam cookie hanya dengan merekam header. Rekam cookie dengan curl dengan menggunakan opsi --dump-header (-D) seperti:



curl --dump-header headers_and_cookies http://www.example.com

(Perhatikan bahwa opsi --cookie-jar yang dijelaskan di bawah adalah cara yang lebih baik untuk menyimpan cookie.)



Curl memiliki mesin pengurai cookie lengkap yang dapat digunakan jika Anda ingin menyambung kembali ke server dan menggunakan cookie yang disimpan dari koneksi sebelumnya (atau dibuat secara manual untuk mengelabui server agar percaya bahwa Anda memiliki koneksi sebelumnya ). Untuk menggunakan cookie yang disimpan sebelumnya, jalankan curl seperti:



curl --cookie disimpan_cookies_in_file http://www.example.com

"Mesin cookie" Curl diaktifkan saat Anda menggunakan opsi --cookie. Jika Anda hanya ingin curl memahami cookie yang diterima, gunakan --cookie dengan file yang tidak ada. Contoh, jika Anda ingin membiarkan curl memahami cookie dari suatu halaman dan mengikuti suatu lokasi (dan mungkin mengirim kembali cookie yang diterimanya), Anda dapat menjalankannya seperti:



curl --cookie nada --lokasi http://www.example.com

Curl memiliki kemampuan untuk membaca dan menulis file cookie yang menggunakan format file yang sama dengan yang pernah digunakan Netscape dan Mozilla. Ini adalah cara mudah untuk berbagi cookie antar skrip atau pemanggilan. Sakelar --cookie (-b) secara otomatis mendeteksi apakah file tertentu adalah file cookie dan mem-parsingnya, dan dengan menggunakan opsi --cookie-jar (-c) Anda akan membuat curl menulis file cookie baru di akhir dari suatu operasi:



curl --cookie cookies.txt --cookie-jar newcookies.txt http://www.example.com

HTTPS

HTTPS adalah HTTP aman

Ada beberapa cara untuk melakukan transfer HTTP yang aman. Sejauh ini protokol yang paling umum untuk melakukan hal ini adalah apa yang umumnya dikenal sebagai HTTPS, HTTP melalui SSL. SSL mengenkripsi semua data yang dikirim dan diterima melalui jaringan sehingga mempersulit penyerang untuk memata-matai informasi sensitif.



SSL (atau TLS sebagaimana versi standar saat ini disebut) menawarkan serangkaian fitur lanjutan untuk melakukan transfer aman melalui HTTP.



Curl mendukung pengambilan terenkripsi ketika dibuat untuk menggunakan perpustakaan TLS dan dapat dibuat untuk menggunakan salah satu dari kumpulan perpustakaan yang cukup besar - curl -V akan menunjukkan yang mana yang ingin digunakan oleh curl Anda (jika ada!). Untuk mendapatkan halaman dari server HTTPS, jalankan curl seperti:



keriting https://secure.example.com

Sertifikat

Di dunia HTTPS, Anda menggunakan sertifikat untuk memvalidasi bahwa Anda adalah orang yang Anda klaim, sebagai tambahan pada kata sandi biasa. Curl mendukung sertifikat sisi klien. Semua sertifikat dikunci dengan frasa sandi, yang harus Anda masukkan sebelum sertifikat dapat digunakan oleh curl. Frasa sandi dapat ditentukan pada baris perintah atau jika tidak, dimasukkan secara interaktif ketika curl menanyakannya. Gunakan sertifikat dengan curl di server HTTPS seperti:



curl --cert mycert.pem https://secure.example.com

curl juga mencoba memverifikasi bahwa server tersebut sesuai dengan yang diklaimnya, dengan memverifikasi sertifikat server terhadap bundel sertifikat CA yang disimpan secara lokal. Gagal dalam verifikasi akan menyebabkan curl menolak koneksi. Anda kemudian harus menggunakan --insecure (-k) jika Anda ingin memberitahu curl untuk mengabaikan bahwa server tidak dapat diverifikasi.



Lebih lanjut tentang verifikasi sertifikat server dan bundel ca cert dapat dibaca di dokumen SSLCERTS.



Kadang-kadang Anda mungkin memiliki penyimpanan sertifikat CA Anda sendiri dan kemudian Anda dapat memberitahu curl untuk menggunakannya untuk memverifikasi sertifikat server:



curl --cacert ca-bundle.pem https://example.com/

Elemen Permintaan Kustom

Ubah metode dan header

Untuk melakukan hal-hal mewah, Anda mungkin perlu menambah atau mengubah elemen dari satu permintaan curl.



Misalnya, Anda dapat mengubah metode POST menjadi PROPFIND dan mengirim data sebagai Tipe Konten: text/xml (bukan Tipe Konten default) seperti ini:



curl --data "<xml>" --header "Jenis Konten: teks/xml" --request PROPFIND example.com

Anda dapat menghapus header default dengan menyediakan header tanpa konten. Sepertinya Anda dapat merusak permintaan dengan memotong header Host::



curl --header "Host:" http://www.example.com

You can add headers the same way. Your server may want a Destination: header, and you can add it:



curl --header "Destination: http://nowhere" http://example.com

More on changed methods

It should be noted that curl selects which methods to use on its own depending on what action to ask for. -d will do POST, -I will do HEAD and so on. If you use the --request / -X option you can change the method keyword curl selects, but you will not modify curl's behavior. This means that if you for example use -d "data" to do a POST, you can modify the method to a PROPFIND with -X and curl will still think it sends a POST . You can change the normal GET to a POST method by simply adding -X POST in a command line like:



curl -X POST http://example.org/

... tetapi curl akan tetap berpikir dan bertindak seolah-olah mengirimkan GET sehingga tidak akan mengirimkan isi permintaan apa pun, dll.



Masuk Web

Beberapa trik masuk

Meskipun tidak hanya terkait dengan HTTP, hal ini masih menyebabkan banyak masalah bagi banyak orang, jadi inilah penjelasan eksekutif tentang cara kerja sebagian besar formulir login dan cara login menggunakan curl.



Dapat juga dicatat bahwa untuk melakukan ini dengan benar secara otomatis, Anda pasti perlu membuat skrip dan melakukan banyak pemanggilan curl, dll.



Pertama, sebagian besar server menggunakan cookie untuk melacak status login klien, jadi Anda perlu menangkap cookie yang Anda terima di tanggapan. Kemudian, banyak situs juga menyetel cookie khusus pada halaman login (untuk memastikan Anda sampai di sana melalui halaman login mereka) jadi Anda harus membiasakan diri terlebih dahulu mendapatkan halaman formulir login untuk menangkap cookie yang disetel di sana.



Beberapa sistem login berbasis web menampilkan berbagai jumlah JavaScript, dan terkadang mereka menggunakan kode tersebut untuk mengatur atau memodifikasi konten cookie. Mungkin mereka melakukan itu untuk mencegah login terprogram, seperti panduan ini menjelaskan cara... Lagi pula, jika membaca kode tidak cukup untuk memungkinkan Anda mengulangi perilaku tersebut secara manual, biasanya menangkap permintaan HTTP yang dilakukan oleh browser Anda dan menganalisis cookie yang dikirim metode yang berfungsi untuk mengetahui cara pintas kebutuhan JavaScript.



Dalam tag <form> sebenarnya untuk login, banyak situs mengisi tag tersembunyi secara acak/sesi atau secara diam-diam dibuat dan Anda mungkin perlu terlebih dahulu mengambil kode HTML untuk formulir login dan mengekstrak semua kolom tersembunyi agar dapat lakukan POST login yang benar. Ingat bahwa konten harus dikodekan URL ketika dikirim dalam POST normal.



Men-debug

Beberapa trik debug

Seringkali ketika Anda menjalankan curl di suatu situs, Anda akan melihat bahwa situs tersebut tampaknya tidak merespons permintaan curl Anda dengan cara yang sama seperti yang terjadi pada browser Anda.



Maka Anda harus mulai membuat permintaan curl Anda lebih mirip dengan permintaan browser Anda:



Gunakan opsi --trace-ascii untuk menyimpan log permintaan yang mendetail agar analisis lebih mudah dan pemahaman lebih baik



Pastikan Anda memeriksa dan menggunakan cookie bila diperlukan (baik membaca dengan --cookie maupun menulis dengan --cookie-jar)



Setel agen pengguna (dengan -A) ke agen seperti yang dilakukan browser populer saat ini



Atur referer (dengan -E) seperti yang diatur oleh browser



Jika Anda menggunakan POST, pastikan Anda mengirimkan semua kolom dan dalam urutan yang sama seperti yang dilakukan browser.



Periksa apa yang dilakukan browser

Penolong yang baik untuk memastikan Anda melakukan ini dengan benar adalah alat pengembang browser web yang memungkinkan Anda melihat semua header yang Anda kirim dan terima (bahkan saat menggunakan HTTPS).



Pendekatan yang lebih mentah adalah menangkap lalu lintas HTTP di jaringan dengan alat seperti Wireshark atau tcpdump dan memeriksa header apa yang dikirim dan diterima oleh browser. (HTTPS memaksa Anda menggunakan SSLKEYLOGFILE untuk melakukan itu.)

Post a Comment for "Seni Membuat Skrip Permintaan HTTP Menggunakan Curl"