Menggunakan wget untuk mengunduh file PDF dari situs yang memerlukan cookie untuk diatur


8

Saya ingin mengakses situs surat kabar dan kemudian mengunduh salinan epaper mereka (dalam PDF). Situs ini mengharuskan saya untuk masuk menggunakan alamat email dan kata sandi saya dan kemudian mengizinkan saya untuk mengakses URL PDF tersebut.

Saya mengalami masalah 'mengatur sesi saya' di Wget . Ketika saya masuk ke situs dari browser saya, itu menetapkan dua nilai cookie:

UserID=abc@gmail.com
Password=12345

Saya mencoba:

wget --post-data "UserID=abc@gmail.com&Password=12345" http://epaper.abc.com/login.aspx

Namun, itu baru saja mengunduh halaman login dan menyimpannya secara lokal.

FORMULIR pada halaman login memiliki dua bidang:

txtUserID
txtPassword

Dan radiobuttons seperti ini:

<input id="rbtnManchester" type="radio" checked="checked" name="txtpub" value="44">

Tombol lain:

<input id="rbtnLondon" type="radio" name="txtpub" value="64">

Jika saya memposting ini ke halaman login.aspx, saya mendapatkan hasil yang sama

wget --post-data "txtUserID=abc@gmail.com&txtPassword=12345&txtpub=44" http://epaper.abc.com/login.aspx

Jika aku melakukan:

--save-cookies abc_cookies.txt

sepertinya tidak memiliki apa pun selain konten default.

Untuk yang terakhir, jika saya melakukannya --debugjuga, dikatakan:

...
Set-Cookie: ASP.NET_SessionId=05kphcn4hjmblq45qgnjoe41; path=/; HttpOnly
...
Stored cookie epaper.abc.com -1 (ANY) / <session> <insecure> [expiry none] ASP.NET_SessionId 05kphcn4hjmblq45qgnjoe41
Length: 107253 (105K) [text/html]
Saving to: `login.aspx'
...
Saving cookies to abc_cookies.txt.

Namun, abc_cookies.txt menunjukkan HANYA yang berikut ini:

# HTTP cookie file.
# Generated by Wget on 2011-08-16 08:03:05.
# Edit at your own risk.

(Saya tidak yakin mengapa saya tidak mendapatkan tanggapan apa pun tentang Stack Overflow - mungkin Super User adalah situs yang lebih baik - Menggunakan Wget untuk mengunduh file PDF dari situs yang memerlukan cookie untuk diatur .)


EDIT 1

C:\Temp>wget --cookies=on --keep-session-cookies --save-cookies abc_cookies.txt --post-data "txtUserID=abc%40gmail.com&txtPassword=password&txtpub=44&chkbox=checkbox&submit.x=48&submit.y=7" http://epaper.abc.com/login.aspx --debug
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files (x86)\GnuWin32/etc/wgetrc
DEBUG output created by Wget 1.11.4 on Windows-MinGW.

--2011-08-18 08:15:59--  http://epaper.abc.com/login.aspx
Resolving epaper.abc.com... seconds 0.00, 999.999.99.99
Caching epaper.abc.com => 999.999.99.99
Connecting to epaper.abc.com|999.999.99.99|:80... seconds 0.00, connected.
Created socket 300.
Releasing 0x00a2ae80 (new refcount 1).

---request begin---
POST /login.aspx HTTP/1.0
User-Agent: Wget/1.11.4
Accept: */*
Host: epaper.abc.com
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 100

---request end---
[POST data: txtUserID=abc%40gmail.com&txtPassword=password&txtpub=44&chkbox=checkbox&submit.x=48&submit.y=7]
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 200 OK
Connection: keep-alive
Date: Thu, 18 Aug 2011 02:46:17 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Set-Cookie: ASP.NET_SessionId=owcrje55yl45kgmhn43gq145; path=/; HttpOnly
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Length: 107253

---response end---
200 OK
Registered socket 300 for persistent reuse.

Stored cookie epaper.abc.com -1 (ANY) / <session> <insecure> [expiry none] ASP.NET_SessionId owcrje55yl45kgmhn43gq145
Length: 107253 (105K) [text/html]
Saving to: `login.aspx.1'

100%[======================================================================================================================>] 107,253     24.9K/s   in 4.2s

2011-08-18 08:16:05 (24.9 KB/s) - `login.aspx.1' saved [107253/107253]

Saving cookies to abc_cookies.txt.
Done saving cookies.

C:\Temp>wget --referer=http://epaper.abc.com/login.aspx --cookies=on --load-cookies abc_cookies.txt --keep-session-cookies --save-cookies abc_cookies.txt http://epaper.abc.com/PagePrint/16_08_2011_001.pdf --debug
SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc
syswgetrc = C:\Program Files (x86)\GnuWin32/etc/wgetrc
DEBUG output created by Wget 1.11.4 on Windows-MinGW.


Stored cookie epaper.abc.com -1 (ANY) / <session> <insecure> [expiry none] ASP.NET_SessionId owcrje55yl45kgmhn43gq145
--2011-08-18 08:16:12--  http://epaper.abc.com/PagePrint/16_08_2011_001.pdf
Resolving epaper.abc.com... seconds 0.00, 999.999.99.99
Caching epaper.abc.com => 999.999.99.99
Connecting to epaper.abc.com|999.999.99.99|:80... seconds 0.00, connected.
Created socket 300.
Releasing 0x00598290 (new refcount 1).

---request begin---
GET /PagePrint/16_08_2011_001.pdf HTTP/1.0
Referer: http://epaper.abc.com/login.aspx
User-Agent: Wget/1.11.4
Accept: */*
Host: epaper.abc.com
Connection: Keep-Alive
Cookie: ASP.NET_SessionId=owcrje55yl45kgmhn43gq145

---request end---
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 200 OK
Connection: keep-alive
Date: Thu, 18 Aug 2011 02:46:30 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
content-disposition: attachement; filename=Default_logo.gif
Cache-Control: private
Content-Type: image/GIF
Content-Length: 4568

---response end---
200 OK
Registered socket 300 for persistent reuse.
Length: 4568 (4.5K) [image/GIF]
Saving to: `16_08_2011_001.pdf'

100%[======================================================================================================================>] 4,568       7.74K/s   in 0.6s

2011-08-18 08:16:14 (7.74 KB/s) - `16_08_2011_001.pdf' saved [4568/4568]

Saving cookies to abc_cookies.txt.
Done saving cookies.

Isi abc_cookies.txt

epaper.abc.com       FALSE   /       FALSE   0       ASP.NET_SessionId       owcrje55yl45kgmhn43gq145

Saya kira Anda tidak mendapat respons karena ada beberapa ahli tentang penggunaan lebih lanjut wget. :(
jcrawfordor

@ Jujur - coba gunakan --keep-session-cookies di awal login wget, lihat jawaban saya di bawah ini.
EightBitTony

Apakah login.aspx URL halaman login, atau URL yang dikirimkan halaman login?
Edward Shtern

Jawaban:


4

Saya pikir Anda perlu menggunakan --keep-session-cookiesuntuk menyimpan cookie sesi, bukan hanya --save-cookies(Anda perlu keduanya).

Pada dasarnya kamu

wget --keep-session-cookies --save-cookies ..... url

untuk masuk dan mendapatkan cookie sesi Anda.

kemudian

wget --load-cookie ...... url

untuk mengunduh PDF.


:( tidak bekerja ... tidak ada dadu ...
siliconpi

@ Jujur - Jadi apa yang terjadi pada setiap tahap, apakah Anda mendapatkan cookie pada disk seperti yang diharapkan, jika Anda menyertakan header apa tanggapan yang Anda dapatkan, dll. Dapatkah Anda memperbarui pertanyaan dengan apa yang sekarang Anda coba dan apa yang dikembalikan.
EightBitTony

Hai Tony - terima kasih telah mencoba membantu - Saya bingung dengan semua ini!
siliconpi

Hai Tony - apakah Anda mendapatkan kesempatan untuk melihat Edit1 yang terperinci?
siliconpi

Ya, tidak ada yang melompat keluar. Satu-satunya pertanyaan saya adalah apa yang ada di login.aspx ketika Anda mendapatkannya kembali dari wget pertama? Apakah ini menunjukkan Anda berhasil masuk?
EightBitTony

2

Mungkin ini akan membantu. Situs yang saya coba masuki memiliki beberapa bidang tersembunyi yang harus saya dapatkan sebelum saya berhasil masuk. Jadi wget pertama mendapatkan halaman login untuk menemukan bidang tambahan, wget kedua login ke situs dan menyimpan cookie, yang ketiga kemudian menggunakan cookie itu untuk mendapatkan halaman yang Anda cari.

#!/bin/bash

# get the login page to get the hidden field data
wget -a log.txt -O loginpage.html http://foobar/default.aspx
hiddendata=`cat loginpage.html | grep value | grep foobarhidden | tr '=' ' ' | awk '{print $9}' | sed s/\"//g`
rm loginpage.html

# login into the page and save the cookies
postData=user=fakeuser'&'pw=password'&'foobarhidden=${hiddendata}
wget -a log.txt -O /dev/null --post-data ${postData} --keep-session-cookies --save-cookies cookies.txt http://foobar/default.aspx

# get the page you're after
wget -a log.txt -O results.html --load-cookies cookies.txt http://foobar/lister.aspx?id=42
rm cookies.txt

Ada beberapa informasi berguna pada pos SO lainnya ini :


1
Silakan coba non-personalisasikan jawaban Anda (hapus "Saya"). Selain itu, untuk salah satu jawaban pertama Anda, Anda melakukan yang terbaik.
wizlog
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.