ฉันจะใช้ wget / curl เพื่อดาวน์โหลดจากเว็บไซต์ที่ฉันเข้าสู่ระบบได้อย่างไร


46

วิกิพีเดียบางส่วนปรากฏแตกต่างกันเมื่อคุณลงชื่อเข้าใช้ฉันต้องการ wget หน้าผู้ใช้ดังนั้นพวกเขาจะปรากฏราวกับว่าฉันลงชื่อเข้าใช้

มีวิธีที่ฉันสามารถรับหน้าผู้ใช้เช่นนี้

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

นี่คือหน้าเข้าสู่ระบบ:

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


ดูstackoverflow.com/a/21919431/1136018สำหรับวิธีแก้ปัญหาอย่างง่ายโดยใช้ Google Chrome + cURL
pterojacktyl

คำตอบ:


50

วิธีที่ง่าย: การเข้าสู่ระบบกับเบราว์เซอร์ของคุณและให้คุกกี้เพื่อwget

วิธีที่ง่ายที่สุด: โดยทั่วไปคุณต้องให้wgetหรือขดกับ (เข้าสู่ระบบ) คุกกี้จากเว็บไซต์เฉพาะสำหรับพวกเขาสามารถดึงข้อมูลหน้าราวกับว่าคุณกำลังเข้าสู่ระบบ

หากคุณกำลังใช้ Firefox มันเป็นเรื่องง่ายที่จะทำผ่านทางคุกกี้ส่งออก Add-on ติดตั้งส่วนเสริมและ:

  1. ไปที่เครื่องมือ ... ส่งออกคุกกี้และบันทึกcookies.txtไฟล์ (คุณสามารถเปลี่ยนชื่อไฟล์ / ปลายทาง)
  2. เปิดเครื่องเทอร์มินัลและใช้wgetกับ--load-cookies=FILENAMEตัวเลือกเช่น

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • สำหรับการม้วนผมนั้นcurl --cookie cookies.txt ...

(ฉันจะพยายามอัปเดตคำตอบนี้สำหรับผู้ใช้ Chrome / Chromium)

วิธีที่ยาก: ใช้curl (ดีกว่า) หรือwgetเพื่อจัดการเซสชันทั้งหมด

  • รายละเอียดวิธีการอยู่นอกเหนือขอบเขตของคำตอบนี้ แต่คุณใช้curlกับ--cookie-jarหรือwgetด้วย--save-cookies --keep-session-cookiesตัวเลือกพร้อมกับวิธี HTTP / S PUT เพื่อเข้าสู่เว็บไซต์บันทึกคุกกี้เข้าสู่ระบบแล้วใช้เพื่อ จำลองเบราว์เซอร์
  • จำเป็นต้องพูดสิ่งนี้ต้องผ่านแหล่ง HTML สำหรับหน้าเข้าสู่ระบบ (รับชื่อฟิลด์ป้อนข้อมูล ฯลฯ ) และมักจะทำงานได้ยากสำหรับไซต์ที่ใช้สิ่งใดนอกเหนือจากการพิสูจน์ตัวตนเข้าสู่ระบบ / รหัสผ่านที่ง่าย
  • เคล็ดลับ:หากคุณไปเส้นทางนี้มักจะง่ายกว่ามากที่จะจัดการกับเว็บไซต์มือถือรุ่น (ถ้ามี) อย่างน้อยสำหรับขั้นตอนการตรวจสอบ

1
เคล็ดลับที่ดี รหัสสำหรับเว็บไซต์บนมือถือมักจะสะอาดกว่าเดิม
CousinCocaine

4
cookies.txt นั้นมีลักษณะอย่างไร
Frederick Nord

ส่วนเสริม "ส่งออกคุกกี้" นี้สร้างไฟล์คุกกี้พร้อมคุกกี้สำหรับทุกเว็บไซต์เดียวที่ฉันเข้าถึงใน Firefox ดังนั้นหากคุณทำตามคำตอบนี้คุณจะได้นำเสนอคุกกี้ทั้งหมดของคุณไปยังไซต์ใดก็ตามที่คุณกำลังกดปุ่ม ฉันคิดว่านี่เป็นข้อบกพร่องด้านความปลอดภัยในคำตอบนี้ คุณสามารถแก้ไขปัญหานี้ได้อย่างง่ายดายโดยใช้: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers


คุณสามารถใช้โปรแกรมเสริมตัวจัดการคุกกี้ใน Firefox เพื่อส่งออกเฉพาะคุกกี้ที่เลือก
Hans Ginzel

7

อีกทางออกที่ง่ายสำหรับฉันโดยไม่ต้องติดตั้งอะไรเพิ่มเติม:

สิ่งนี้จะทำให้คุณมีคำสั่งที่คุณสามารถวางโดยตรงลงในเชลล์ของคุณซึ่งมีข้อมูลรับรองคุกกี้ทั้งหมดของคุณเช่น

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

จากนั้นคุณสามารถปรับเปลี่ยน URL ในคำสั่งเพื่อดึงสิ่งที่คุณต้องการ


4

ด้วย cURL นั้นง่ายต่อการจัดการคุกกี้ทั้งสองวิธี

curl www.target-url.com -c cookie.txtจากนั้นจะบันทึกไฟล์ชื่อ cookie.txt แต่คุณต้องเข้าสู่ระบบจึงไม่จำเป็นต้องใช้ --data curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txtมีข้อโต้แย้งที่ชอบ: เมื่อคุณได้รับคุกกี้ที่เข้าสู่ระบบคุณสามารถส่งโดย: curl www.target-url.com/?user-page.php -b cookie.txt

เพียงใช้ -c (--cookie) หรือ -b (--cookie-jar) เพื่อบันทึกและส่ง

Note1: การใช้ cURL CLI นั้นง่ายกว่า PHP และอาจเร็วกว่า)

สำหรับการบันทึกเนื้อหาสุดท้ายคุณสามารถเพิ่ม> filename.htmlคำสั่ง cURL ของคุณได้อย่างง่ายดายจากนั้นบันทึกรหัส html แบบเต็ม

Note2 เกี่ยวกับ "เต็ม": Yo ไม่สามารถแสดงผลจาวาสคริปต์ด้วย cURL เพียงแค่รับซอร์สโค้ด


1
-Xพารามิเตอร์ย่อมาจาก "do post" แต่การใช้--data=xxx -Xนั้นเป็นนัยดังนั้นคุณสามารถลบออกได้อย่างแน่นอน
erm3nda

-bคือread cookie
Timo

3

สำหรับผู้ที่ยังสนใจคำถามนี้มีส่วนขยายของ Chrome ที่มีประโยชน์มากที่เรียกว่าCurlWGetที่ช่วยให้คุณสร้างwget/ curlร้องขอด้วยมาตรการตรวจสอบสิทธิ์และอื่น ๆ ได้ด้วยคลิกเดียว หากต้องการติดตั้งส่วนขยายนี้ให้ทำตามขั้นตอนด้านล่าง:

  1. ติดตั้งส่วนขยายจากที่Chrome เว็บสโตร์
  2. ไปที่หน้าเว็บที่คุณต้องการดาวน์โหลด
  3. เริ่มการดาวน์โหลด
  4. ส่วนขยายจะสร้างลิงก์ให้คุณ

สนุก!


2

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


2

ดูที่กลุ่มสำหรับ Firefox

เมื่อคุณกำลังจะดาวน์โหลดในกล่องโต้ตอบดาวน์โหลดสุดท้ายคุณจะได้รับตัวเลือกให้คัดลอกดาวน์โหลดเป็นบรรทัดคำสั่ง curl ไปยังคลิปบอร์ด


1

คุณเคยลองสิ่งนี้หรือไม่?

wget --user=username --password=password http://en.wikipedia.org/wiki/User:A

ใช่ - โชคไม่ดีที่ใช้งานไม่ได้ = (
user784637

6
หมายเหตุ: ไวยากรณ์นี้ใช้สำหรับการรับรองความถูกต้อง HTTP พื้นฐานเท่านั้น (ที่เบราว์เซอร์ของคุณปรากฏขึ้นกล่องโต้ตอบชื่อผู้ใช้ / รหัสผ่านพิเศษ) ไม่ใช่สำหรับการตรวจสอบความถูกต้องโดยใช้เว็บเพจ
ish

รูปแบบ URL การรับรองความถูกต้อง HTTP พื้นฐานคือผู้ดูแลระบบ: admin@www.url.com แต่ตามที่ @izx ได้บอกไว้ HTTP พื้นฐานเป็นคุณลักษณะของเบราว์เซอร์ไม่ใช่การเขียนโปรแกรม PHP และรหัส หากสักวันคุณจำเป็นต้องเข้าถึง URL ที่ป้องกันของ htaccess คุณสามารถใช้โหมดนั้นได้ D
erm3nda

ฉันไม่ได้ลงคะแนน แต่นี่ไม่ใช่วิธีที่ดีในการตรวจสอบสิทธิ์: หากคุณทำให้สคริปต์ดังกล่าวเป็นแบบสาธารณะโดยบังเอิญผู้คนสามารถใช้รหัสผ่านของคุณได้
Willem Van Onsem

1
downvotes คืออะไร อาจไม่ใช่คำตอบที่จับทั้งหมด แต่ยังคงเป็นคำตอบ
โอเวอร์โค้ด

1

ลองสิ่งที่ชอบ:

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

ดูลิงค์นี้:

วิธีการดาวน์โหลดเว็บเพจนี้ด้วย wget


เช่นเดียวกับผลลัพธ์ใด ๆ ใช้> filename.htmlเพื่อบันทึกผลลัพธ์ที่ dir ปัจจุบันหรือใส่เส้นทางไฟล์ที่สมบูรณ์ สิ่งนี้ใช้กับทั้งระบบ Linux และ Windows
erm3nda

ดังนั้นฉันจึงเห็นว่า wget มีคุณสมบัติมากมายเช่น cURL หรือ viceversa มันสามารถทำ POST เพื่อให้สามารถเข้าสู่เว็บไซต์ น่าสนใจ
erm3nda

1

สำหรับความซับซ้อนมากขึ้นเข้าสู่ระบบเว็บไซต์ตามคุณควรพิจารณาการใช้สคริปต์หลามและโมดูลบางอย่างที่เลียนแบบเบราว์เซอร์เช่นhttp://wwwsearch.sourceforge.net/mechanize/แทนหรือcurlwget

วิธีนี้จะมีการจัดการคุกกี้เซสชันโดยอัตโนมัติคุณสามารถติดตามลิงก์และกรอกแบบฟอร์มการเข้าสู่ระบบและ "สคริปต์" ด้วยตัวคุณเองผ่านขั้นตอนการเข้าสู่ระบบราวกับว่าใช้เว็บเบราว์เซอร์ของคุณ


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