การใช้ wget เพื่อดาวน์โหลดไฟล์ PDF จากเว็บไซต์ที่ต้องตั้งค่าคุกกี้


8

ฉันต้องการเข้าถึงเว็บไซต์หนังสือพิมพ์แล้วดาวน์โหลดสำเนา ePaper ของพวกเขา (เป็น PDF) ไซต์ต้องการให้ฉันเข้าสู่ระบบโดยใช้ที่อยู่อีเมลและรหัสผ่านของฉันจากนั้นอนุญาตให้ฉันเข้าถึง URL ของ PDF

ฉันมีปัญหาใน 'การตั้งค่าเซสชั่นของฉัน' ในWget เมื่อฉันเข้าสู่เว็บไซต์จากเบราว์เซอร์ของฉันมันจะตั้งค่าคุกกี้สองค่า:

UserID=abc@gmail.com
Password=12345

ฉันเหนื่อย:

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

อย่างไรก็ตามนั่นเป็นเพียงการดาวน์โหลดหน้าเข้าสู่ระบบและบันทึกไว้ในเครื่อง

FORM บนหน้าเข้าสู่ระบบมีสองช่อง:

txtUserID
txtPassword

และ radiobuttons เช่นนี้

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

ปุ่มอื่น:

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

หากฉันโพสต์สิ่งนี้ในหน้า login.aspx ฉันจะได้ผลลัพธ์เดียวกัน

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

ถ้าฉันทำ:

--save-cookies abc_cookies.txt

ดูเหมือนว่าจะไม่มีสิ่งอื่นใดนอกจากเนื้อหาเริ่มต้น

สำหรับสุดท้ายถ้าฉันทำ--debugเช่นนั้นก็พูดว่า:

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

อย่างไรก็ตาม abc_cookies.txt แสดงเฉพาะต่อไปนี้:

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

(ฉันไม่แน่ใจว่าทำไมฉันไม่ได้รับคำตอบใด ๆ เกี่ยวกับ Stack Overflow - อาจเป็น Super User เป็นเว็บไซต์ที่ดีกว่า - การใช้ Wget เพื่อดาวน์โหลดไฟล์ PDF จากเว็บไซต์ที่ต้องตั้งค่าคุกกี้ )


แก้ไข 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.

เนื้อหาของ abc_cookies.txt

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

ฉันสงสัยว่าคุณไม่ได้รับการตอบกลับเนื่องจากมีผู้เชี่ยวชาญไม่กี่คนที่ใช้งานขั้นสูงกว่าของ wget :(
jcrawfordor

@ Frank - ลองใช้ --keep-session-cookies ในการเข้าสู่ระบบครั้งแรกดูคำตอบของฉันด้านล่าง
EightBitTony

login.aspx เป็น URL ของหน้าเข้าสู่ระบบหรือ URL ที่หน้าเข้าสู่ระบบส่งไปหรือไม่
Edward Shtern

คำตอบ:


4

ฉันคิดว่าคุณต้องใช้--keep-session-cookiesเพื่อรักษาคุกกี้เซสชั่นมากกว่าเพียงแค่--save-cookies(คุณต้องการทั้งสองอย่าง)

โดยทั่วไปแล้วคุณ

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

เพื่อเข้าสู่ระบบและรับคุกกี้เซสชันของคุณ

แล้วก็

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

เพื่อดาวน์โหลด PDF


:( ใช้งานไม่ได้ ... ไม่มีลูกเต๋า ...
siliconpi

@ Frank - สิ่งที่เกิดขึ้นในแต่ละขั้นตอนคุณได้รับคุกกี้บนดิสก์ตามที่คาดไว้หรือไม่ถ้าคุณรวมส่วนหัวคุณจะได้รับคำตอบอะไรบ้าง ฯลฯ คุณสามารถอัปเดตคำถามด้วยสิ่งที่คุณพยายามแล้ว
EightBitTony

สวัสดีโทนี่ - ขอบคุณที่พยายามช่วย - ฉันสับสนกับสิ่งนี้ทั้งหมด!
siliconpi

สวัสดีโทนี่ - คุณมีโอกาสได้ดูรายละเอียด Edit1 หรือไม่
siliconpi

ใช่ไม่มีอะไรกระโดดออกมา คำถามเดียวของฉันคือสิ่งที่อยู่ใน login.aspx เมื่อคุณได้รับมันกลับมาจาก wget แรก? มันบ่งบอกว่าคุณประสบความสำเร็จในการเข้าสู่ระบบหรือไม่?
EightBitTony

2

บางทีนี่อาจช่วยได้ ไซต์ที่ฉันพยายามลงชื่อเข้าใช้มีเขตข้อมูลที่ซ่อนอยู่ซึ่งฉันต้องได้รับก่อนที่จะเข้าสู่ระบบได้สำเร็จ ดังนั้น wget แรกจะได้รับหน้าเข้าสู่ระบบเพื่อค้นหาฟิลด์เพิ่มเติม, wget ที่สองเข้าสู่เว็บไซต์และบันทึกคุกกี้หนึ่งในสามนั้นใช้คุกกี้เหล่านั้นเพื่อรับหน้าเว็บที่คุณอยู่หลังจากนั้น

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

มีข้อมูลที่เป็นประโยชน์ในโพสต์ SO อื่นนี้ :


1
โปรดลองยกเลิกคำตอบในแบบของคุณ (ลบ "ฉัน") นอกจากนั้นสำหรับคำตอบข้อแรกข้อใดข้อหนึ่งของคุณ
wizlog
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.