Mengotomatiskan permintaan web menggunakan curl?

13

Saya memiliki beberapa sistem "korporatif" yang harus saya gunakan di tempat kerja. Beberapa dari mereka mengerikan, dengan bingkai, pop-up dan semacamnya.

Saya sedang berpikir tentang mengotomatisasi beberapa hal menggunakan curl atau sesuatu seperti itu. Saya perlu login, klik hyperlink, atur beberapa data, dan mereka lakukan beberapa posting.

Apakah mungkin menggunakan keriting? Atau apakah saya akan lebih baik menggunakan sesuatu seperti Selenium?

Seseorang masih menggunakan Anda MS-DOS
sumber
1
Saya akan menggunakan zope.testbrowser Python untuk itu.
phunehehe
2
Apakah Anda harus dapat menggunakan Javascript?
intuited
2
Menggunakan sesi hanya mengirim id sesi dengan setiap permintaan. Baik dalam cookie atau dalam parameter GET. wgetdan curldapat menggunakan file cookie Netscape, jadi jika browser Anda juga menggunakan yang seperti itu, mungkin cukup dengan hanya menentukannya ke pengunduh. Jadi, jenis browser apa yang Anda gunakan?
manatwork
2
Tidak beruntung untuk solusi sederhana dengan itu. Firefox dan Chrome menggunakan SQLite, Opera memiliki format file data biner. Sepertinya Anda harus mencari id sesi dan meneruskannya secara manual ke pengunduh.
manatwork

Jawaban:

13

Ya, sangat mungkin dengan curl. Yang paling penting adalah menyimpan dan memuat kembali cookie di antara penggunaan curl --cookie-jar. Anda juga dapat memposting data formulir sesuai kebutuhan. Saya biasanya menggunakan add-on Firefox yang disebut Live HTTP Header untuk menangkap apa yang terjadi ketika saya menavigasi situs web. Ini akan merekam setiap header, tetapi juga setiap posting bentuk yang sangat membantu ketika mencoba untuk mencari tahu apa yang harus dilakukan dengan curl. Saya telah menulis skrip bash mengotomatiskan berbagai permintaan ikal dan menggunakan pipa dan file sementara (milik mktemp) untuk melakukan beberapa pemrosesan terbatas pada halaman web, tetapi jika harus melakukan banyak pemrosesan halaman web saya biasanya beralih ke Perl dengan LibWWW.

penguin359
sumber
Selain Header HTTP Langsung Firefox, Safari dan Chrome dapat menampilkan header yang dirinci berdasarkan objek di Web Inspector.
bahamat
15

Untuk kasus sederhana mengunduh konten halaman, gunakan curl atau wget . Keduanya adalah alat baris perintah yang dirancang untuk mengunduh file melalui HTTP dan memiliki banyak opsi. Dalam kasus Anda, Anda mungkin perlu membuat alat-alat ini lebih mirip browser; jawaban lutzky dan jawaban penguin359 menyebutkan beberapa opsi curl dan wget yang berguna dalam hal itu.

Terkadang, ketika Anda harus masuk , jauh lebih mudah untuk masuk secara manual di browser web, lalu ekspor cookie browser web (ekstensi seperti allcookies atau Ekspor Cookie untuk Firefox dapat membantu).

Jika Anda perlu mem-parsing konten beberapa halaman atau memposting formulir , Anda mungkin membutuhkan alat yang lebih bagus daripada menggulung dan meleset. Beberapa alat yang bagus ada Perl dengan LWP(libwww) dan HTML::TreeBuilder(HTML-Tree) atau Python dengan perpustakaan standar (terutama httplibdanhtmllib ).

Untuk interaksi yang lebih kompleks dengan situs web, rujukannya adalah Perl's WWW :: Mechanize . Perpustakaan Perl ini mendefinisikan fungsi tingkat tinggi untuk berinteraksi dengan situs web seperti yang dilakukan oleh browser web, termasuk POSTing, formulir, cookie, tetapi tidak Javascript. Jika Perl bukan secangkir teh Anda, perpustakaan ini memiliki tiruan dengan kemampuan serupa dalam bahasa lain, seperti Python mechanize dan Ruby Mechanize .

Akhirnya, ketika Anda membutuhkan Javascript , pendekatan yang biasa digunakan adalah menggunakan browser web yang digerakkan oleh kerangka kerja otomatisasi browser. Selenium dan Watir adalah pilihan populer; lihat juga Apakah ada alat yang bagus selain SeleniumRC yang dapat mengambil halaman web termasuk konten pasca-dicat oleh JavaScript?

Gilles 'SANGAT berhenti menjadi jahat'
sumber
6

Favorit saya adalah wget, jadi saya akan memberi contoh dengan itu. Yang ingin Anda lakukan adalah mereplikasi sesi browser Anda sedekat mungkin, jadi gunakan argumen baris perintah yang relevan. Yang diperlukan tergantung pada seberapa teliti situs memeriksa browser Anda. --referer(sic) biasanya cukup, tetapi Anda mungkin juga perlu --user-agentdan --load-cookies.

Teknik ini pada dasarnya adalah spoofing peramban - Anda mencoba wgetmenampilkan diri di situs sebagai peramban. Masalah terbesar yang akan Anda hadapi adalah CAPTCHA, yang tidak ada di situs contoh yang Anda berikan. Juga, pastikan Anda mematuhi kebijakan waktu situs (45 detik dalam kasus ini), atau Anda mungkin akan diblokir.

Mungkin tidak mungkin untuk mengunduh file yang sama di berbagai sesi - situs ini memberikan hak istimewa mengunduh pada file tertentu ke sesi tertentu.

Lutzky
sumber
Jawaban bagus dengan pertimbangan komprehensif. Terima kasih
xiaohan2012