Bagaimana cara menggunakan wget / curl untuk mengunduh dari situs tempat saya masuk?

46

Beberapa bagian wikipedia muncul secara berbeda ketika Anda masuk. Saya ingin membuat halaman pengguna jadi mereka akan muncul seolah-olah saya masuk.

Apakah ada cara saya bisa membuat halaman pengguna seperti ini

http://en.wikipedia.org/wiki/User:A

ini adalah halaman login:

http://en.wikipedia.org/w/index.php?title=Special:UserLogin&returnto=Login&campaign=ACP3
pengguna784637
sumber

Jawaban:

50

Cara mudah: login dengan browser Anda, dan berikan cookie untuk wget

Metode termudah: secara umum, Anda perlu menyediakan cookie wget atau curl (login) dari situs web tertentu agar mereka dapat mengambil halaman seolah-olah Anda login .

Jika Anda menggunakan Firefox, mudah dilakukan melalui add-on Ekspor Cookie . Pasang add-on, dan:

  1. Pergi ke Alat ... Ekspor Cookie , dan simpan cookies.txtfile (Anda dapat mengubah nama file / tujuan).
  2. Buka terminal, dan gunakan wgetdengan --load-cookies=FILENAMEopsi, mis

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • Untuk ikal , inicurl --cookie cookies.txt ...

(Saya akan mencoba memperbarui jawaban ini untuk pengguna Chrome / Chromium)

Cara yang sulit: gunakan curl (lebih disukai) atau wget untuk mengatur seluruh sesi

  • Cara terinci berada di luar cakupan jawaban ini, tetapi Anda menggunakan ikal dengan --cookie-jaratau wget dengan --save-cookies --keep-session-cookiesopsi, bersama dengan metode HTTP / S PUT untuk masuk ke situs, menyimpan cookie masuk, dan kemudian menggunakannya untuk mensimulasikan peramban.
  • Tak perlu dikatakan, ini membutuhkan melalui sumber HTML untuk halaman login (mendapatkan nama field input, dll.), Dan seringkali sulit untuk bekerja di situs menggunakan apa pun di luar otentikasi login / password sederhana.
  • Kiat: jika Anda menggunakan rute ini, sering kali lebih mudah untuk berurusan dengan versi seluler situs web (jika tersedia), setidaknya untuk langkah otentikasi.
ish
sumber
1
Tip yang bagus. Kode untuk situs seluler seringkali lebih bersih.
CousinCocaine
4
bagaimana tampilan cookies.txt tersebut?
Frederick Nord
Pengaya "Ekspor Cookie" ini membuat file cookie dengan cookie untuk setiap situs yang saya akses di Firefox. Jadi, jika Anda mengikuti jawaban ini, Anda akan menampilkan semua cookie Anda ke situs apa pun yang Anda tekan. Saya menganggap ini sebagai kelemahan keamanan dalam jawaban ini. Anda dapat dengan mudah mengatasi masalah ini dengan menggunakan: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers
Anda dapat menggunakan add-on Cookie Manager di Firefox untuk mengekspor cookie yang dipilih saja.
Hans Ginzel
7

Solusi mudah lain yang bekerja untuk saya tanpa menginstal apa pun tambahan:

Ini akan memberi Anda perintah yang dapat Anda tempel langsung ke shell Anda, yang memiliki semua kredensial cookie Anda mis

curl 'https://mysite.test/my-secure-dir/picture1.jpg' \ 
-H 'User-Agent: Mozilla/5.0 ...' \
-H 'Cookie: SESSIONID=abcdef1234567890'

Anda kemudian dapat memodifikasi URL pada perintah untuk mengambil apa pun yang Anda inginkan.

BlackShift
sumber
4

Dengan cURL sangat mudah untuk menangani cookie dengan dua cara.

curl www.target-url.com -c cookie.txtmaka akan menyimpan file bernama cookie.txt. Tapi Anda harus login, sehingga perlu menggunakan --data dengan argumen seperti: curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt. Setelah Anda mendapatkan cookie yang masuk Anda dapat mengirimkannya dengan: curl www.target-url.com/?user-page.php -b cookie.txt

Cukup gunakan -c (--cookie) atau -b (--cookie-jar) untuk menyimpan dan mengirim.

Catatan1: Menggunakan cURL CLI jauh lebih mudah daripada PHP dan mungkin lebih cepat;)

Untuk menyimpan konten akhir, Anda dapat dengan mudah menambahkan > filename.htmlperintah CURL Anda kemudian menyimpan kode html lengkap.

Note2 tentang "penuh": Anda tidak dapat membuat javascript dengan cURL, dapatkan kode sumber saja.

erm3nda
sumber
1
-Xparameter adalah singkatan dari "do post", tetapi menggunakan --data=xxx -Ximplisit, sehingga Anda dapat menghapusnya dengan pasti.
erm3nda
-badalahread cookie
Timo
3

Bagi mereka yang masih tertarik dengan pertanyaan ini, ada ekstensi Chrome yang sangat berguna bernama CurlWGet yang memungkinkan Anda untuk menghasilkan wget/ curlpermintaan dengan tindakan otentikasi, dll. Dengan satu klik. Untuk menginstal ekstensi ini, ikuti langkah-langkah di bawah ini:

  1. Pasang ekstensi dari Toko Web Chrome .
  2. Buka halaman web yang ingin Anda unduh.
  3. Mulai unduhan.
  4. Ekstensi akan menghasilkan tautan untuk Anda.

Nikmati!

jehon
sumber
2

Posting blog Wget with Firefox Cookies menunjukkan cara mengakses file data sqlite tempat Firefox menyimpan cookie-nya. Dengan begitu kita tidak perlu mengekspor cookie secara manual untuk digunakan dengan wget. Sebuah komentar menunjukkan bahwa itu tidak bekerja dengan cookie sesi, tetapi itu berfungsi dengan baik untuk situs yang saya coba.

Falko Menge
sumber
2

lihat cliget untuk Firefox.

Saat Anda akan mengunduh, pada dialog unduhan akhir Anda mendapatkan opsi untuk menyalin unduhan sebagai baris perintah curl ke clipboard.

weberjn
sumber
1

Sudahkah Anda mencoba ini?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A
Corey Whitaker
sumber
ya - sayangnya itu tidak berhasil = (
user784637
6
Catatan: sintaks ini hanya berfungsi untuk otentikasi HTTP dasar (di mana browser Anda memunculkan kotak dialog Username / Password khusus), bukan untuk otentikasi berbasis halaman web.
ish
Otentikasi HTTP dasar format url adalah admin: [email protected] tetapi seperti yang dikatakan @izx, HTTP dasar adalah fitur peramban, bukan pemrograman atau kode PHP. Jika suatu hari Anda perlu mengakses url yang dilindungi htaccess Anda dapat menggunakan mode itu; D
erm3nda
Saya tidak mengundurkan diri, tetapi ini bukan cara yang baik untuk mengautentikasi: jika Anda, secara tidak sengaja membuat skrip tersebut menjadi publik, orang dapat menggunakan kata sandi Anda.
Willem Van Onsem
1
Ada apa dengan downvotes? Mungkin bukan jawaban yang mudah dimengerti tetapi masih merupakan jawaban.
Overcode
1

Coba sesuatu seperti:

wget --keep-session-cookies --save-cookies cookies.txt --post-data 'user=goyamy&passwrd=mypassword' http://forum.ubuntu-it.org/

Lihat juga tautan ini:

Bagaimana cara mengunduh halaman web ini dengan wget?

kenorb
sumber
Sama seperti output apa pun. Gunakan > filename.htmluntuk menyimpan output pada dir saat ini atau meletakkan filepath lengkap. Ini berlaku untuk sistem Linux dan Windows.
erm3nda
Jadi, saya melihat bahwa wget memiliki banyak fitur seperti CURL, atau sebaliknya. Ia dapat melakukan POST, sehingga dapat melakukan login ke situs web. Menarik.
erm3nda
1

Untuk login berbasis situs web yang lebih rumit, Anda juga harus mempertimbangkan untuk menggunakan skrip Python dan beberapa modul yang meniru browser, seperti http://wwwsearch.sourceforge.net/mechanize/ alih-alih curlatau wget.

Dengan cara ini cookie sesi ditangani secara otomatis, Anda dapat mengikuti tautan dan mengisi formulir login, dan dengan demikian "skrip" diri Anda sendiri melalui proses login seolah-olah menggunakan browser web Anda.

STW
sumber
Ya, menggunakan mekanik bisa sangat menyenangkan. Juga (dan awalnya) tersedia di Perl, jika itu lebih dari secangkir teh Anda.
andol