Sử dụng wget để tải xuống các tệp PDF từ một trang web yêu cầu đặt cookie


8

Tôi muốn truy cập một trang báo và sau đó tải xuống các bản sao giấy của họ (dưới dạng PDF). Trang web yêu cầu tôi đăng nhập bằng địa chỉ email và mật khẩu của mình và sau đó nó cho phép tôi truy cập các URL PDF đó.

Tôi gặp sự cố 'cài đặt phiên của tôi' trong Wget . Khi tôi đăng nhập vào trang web từ trình duyệt của mình, nó sẽ đặt hai giá trị cookie:

UserID=abc@gmail.com
Password=12345

Tôi đã thử:

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

Tuy nhiên, điều đó chỉ cần tải xuống trang đăng nhập và lưu nó cục bộ.

MẪU trên trang đăng nhập có hai trường:

txtUserID
txtPassword

Và radiobutton như thế này:

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

Một nút khác:

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

Nếu tôi đăng bài này lên trang login.aspx, tôi sẽ nhận được cùng một đầu ra

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

Nếu tôi làm:

--save-cookies abc_cookies.txt

nó dường như không có gì khác ngoài nội dung mặc định.

Cuối cùng, nếu tôi cũng làm --debugnhư vậy, nó nói:

...
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.

Tuy nhiên, abc_cookies.txt CHỈ hiển thị như sau:

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

(Tôi không chắc tại sao tôi không nhận được bất kỳ phản hồi nào về Stack Overflow - có lẽ Super User là một trang web tốt hơn - Sử dụng Wget để tải xuống các tệp PDF từ một trang web yêu cầu đặt cookie .)


CHỈNH SỬA 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.

Nội dung của abc_cookies.txt

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

Tôi nghi ngờ bạn sẽ không nhận được phản hồi vì có một vài chuyên gia về cách sử dụng nâng cao hơn của wget. :(
jcrawfordor

@Frank - hãy thử sử dụng --keep-session-cookies trong wget đăng nhập ban đầu, xem câu trả lời của tôi dưới đây.
EightBitTony

Là login.aspx URL của trang đăng nhập, hay URL mà trang đăng nhập gửi đến?
Edward Shtern

Câu trả lời:


4

Tôi nghĩ rằng bạn cần sử dụng --keep-session-cookiesđể bảo vệ cookie phiên, thay vì chỉ --save-cookies(bạn cần cả hai).

Về cơ bản, bạn

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

để đăng nhập và nhận cookie phiên của bạn.

sau đó

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

để tải xuống bản PDF.


:( đã không hoạt động ... không có xúc xắc ...
siliconpi

@Frank - Vì vậy, những gì đã xảy ra ở mỗi giai đoạn, bạn có nhận được cookie trên đĩa như mong đợi không, nếu bạn bao gồm các tiêu đề bạn sẽ nhận được phản hồi, v.v. Bạn có thể cập nhật câu hỏi với những gì bạn đã thử và những gì đã trả lại.
EightBitTony

Xin chào Tony - cảm ơn vì đã cố gắng giúp đỡ - Tôi rất bối rối với toàn bộ điều này!
siliconpi

Xin chào Tony - bạn có cơ hội xem Edit1 chi tiết không?
siliconpi

Vâng, không có gì nhảy ra. Truy vấn duy nhất của tôi là những gì trong login.aspx khi bạn lấy lại từ wget đầu tiên? Nó cho biết bạn đã đăng nhập thành công?
EightBitTony

2

Có thể điều này sẽ giúp. Trang web tôi đang cố đăng nhập có một số trường ẩn mà tôi cần có trước khi tôi có thể đăng nhập thành công. Vì vậy, wget đầu tiên có được trang đăng nhập để tìm các trường bổ sung, wget thứ hai đăng nhập vào trang web và lưu cookie, cái thứ ba sau đó sử dụng các cookie đó để lấy trang bạn đang theo dõi.

#!/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

Có một số thông tin hữu ích về bài đăng SO khác này :


1
Vui lòng thử hủy cá nhân hóa câu trả lời của bạn (xóa "Tôi"). Ngoài ra, đối với một trong những câu trả lời đầu tiên của bạn, bạn đang làm rất tốt.
wizlog
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.