ฉันพยายามใช้Wgetเพื่อดาวน์โหลดหน้า แต่ฉันไม่สามารถผ่านหน้าจอเข้าสู่ระบบได้
ฉันจะส่งชื่อผู้ใช้ / รหัสผ่านโดยใช้ข้อมูลโพสต์ในหน้าเข้าสู่ระบบจากนั้นดาวน์โหลดหน้าจริงในฐานะผู้ใช้ที่ได้รับการรับรองความถูกต้องได้อย่างไร
ฉันพยายามใช้Wgetเพื่อดาวน์โหลดหน้า แต่ฉันไม่สามารถผ่านหน้าจอเข้าสู่ระบบได้
ฉันจะส่งชื่อผู้ใช้ / รหัสผ่านโดยใช้ข้อมูลโพสต์ในหน้าเข้าสู่ระบบจากนั้นดาวน์โหลดหน้าจริงในฐานะผู้ใช้ที่ได้รับการรับรองความถูกต้องได้อย่างไร
คำตอบ:
ตามหน้าคู่มือ:
# Log in to the server. This only needs to be done once.
wget --save-cookies cookies.txt \
--keep-session-cookies \
--post-data 'user=foo&password=bar' \
--delete-after \
http://server.com/auth.php
# Now grab the page or pages we care about.
wget --load-cookies cookies.txt \
http://server.com/interesting/article.php
ตรวจสอบให้แน่ใจว่า--post-data
พารามิเตอร์มีการเข้ารหัสเป็นเปอร์เซ็นต์อย่างถูกต้อง(โดยเฉพาะเครื่องหมายแอมเปอร์แซนด์!) มิฉะนั้นคำขออาจล้มเหลว ตรวจสอบให้แน่ใจด้วยว่าuser
และpassword
เป็นกุญแจที่ถูกต้อง; คุณสามารถค้นหาคีย์ที่ถูกต้องได้ด้วยการเปิด HTML ของหน้าเข้าสู่ระบบ (ดูที่คุณสมบัติ "ตรวจสอบองค์ประกอบ" ของเบราว์เซอร์ของคุณและค้นหาname
แอตทริบิวต์ในฟิลด์ชื่อผู้ใช้และรหัสผ่าน)
-p
( --page-requisites
) สำหรับสิ่งนี้
--delete-after
ให้กับการดึงข้อมูลครั้งแรกเพื่อที่คุณจะได้ไม่ต้องบันทึกหน้าผลลัพธ์จากการเข้าสู่ระบบ
WGET64: missing URL
ฉันใส่คำสั่ง wget ทั้งหมดในบรรทัดเดียวและลบ `\ '
หากคุณต้องการใช้ครั้งเดียวคุณสามารถเข้าสู่ระบบผ่านเบราว์เซอร์และคัดลอกส่วนหัวที่ต้องการหลังจากนั้น:
ใช้ "คัดลอกเป็นม้วน" ในเครือข่ายแท็บเครื่องมือสำหรับนักพัฒนา (โหลดหน้าหลังเปิด) และแทนที่ธงหัวขดของ-H
และ--data
มี wget ของและ--header
--post-data
wget
ที่คุกกี้ที่ถูกต้องไม่ได้ ฉันสงสัยว่าเว็บเซอร์วิสจะตรวจสอบส่วนหัว GET ที่แตกต่างกันหลายแห่งแม้ดูเหมือนจะไม่สำคัญเช่น "User-Agent" หรือ "Cache-Control"
wget
ให้ข้อมูลผิดวิธี
ฉันให้คุกกี้ของการเชื่อมต่อที่มีอยู่โดยตรงเพื่อใช้กับ - ไม่มีคุกกี้และส่วนหัวคำขอคุกกี้ HTTP ในกรณีของฉันมันคือการเข้าสู่ระบบของมหาวิทยาลัย Moodle ที่การเข้าสู่ระบบดูซับซ้อนมากขึ้น (ใช้คำขอหลายรายการพร้อมตั๋วเข้าสู่ระบบ) ฉันเพิ่ม --post-data เพราะมันเป็นคำขอ POST ตัวอย่างเช่นรับรายชื่อผู้ใช้ Moodle ทั้งหมด:
wget --no-cookies --header "Cookie: <name>=<value>" --post-data 'tab=search&name=+&personsubmit=Rechercher&keywords=&keywordsoption=allmine' https://moodle.unistra.fr/message/index.php
ผมมีปัญหาเหมือนกัน. ทางออกของฉันคือการเข้าสู่ระบบผ่าน Chrome และบันทึกข้อมูลคุกกี้ลงในไฟล์ข้อความ นี้จะกระทำได้อย่างง่ายดายด้วยส่วนขยายของ Chrome: Chrome ขยายการส่งออก
เมื่อคุณได้รับข้อมูลคุกกี้นอกจากนี้ยังมีตัวอย่างเกี่ยวกับวิธีการใช้พวกเขาด้วย wget บรรทัดคำสั่งคัดลอกวางง่ายให้กับคุณ
ฉันต้องการหนึ่งซับที่ไม่ดาวน์โหลดไฟล์ใด ๆ นี่คือตัวอย่างของการไพพ์เอาต์พุตคุกกี้ลงในคำขอถัดไป ฉันทดสอบสิ่งต่อไปนี้บน Gentoo เท่านั้น แต่ควรทำงานในสภาพแวดล้อมส่วนใหญ่ * * * * nix:
wget -q -O /dev/null --save-cookies /dev/stdout --post-data 'u=user&p=pass' 'http://example.com/login' | wget -q -O - --load-cookies /dev/stdin 'http://example.com/private/page'
(นี่คือหนึ่งบรรทัดแม้ว่าจะมีการหุ้มเบราว์เซอร์ของคุณ)
หากคุณต้องการบันทึกผลลัพธ์ไปยังไฟล์ให้เปลี่ยน-O -
เป็น-O /some/file/name
คุณไม่ต้องการ cURL ในการทำข้อมูลแบบฟอร์มที่โพสต์ --post-data 'key1=value1&key2=value2'
ทำงานได้ดี หมายเหตุ: คุณยังสามารถส่งชื่อไฟล์เพื่อ wget ด้วยข้อมูล POST ในไฟล์
หากพวกเขากำลังใช้การรับรองความถูกต้องพื้นฐาน:
wget http://username:password@www.domain.com/page.html
หากพวกเขากำลังใช้ข้อมูลแบบฟอร์มที่โพสต์คุณจะต้องใช้บางอย่างเช่นcURLแทน
หมายเหตุ: Lynx จะต้องมีการคอมไพล์ด้วยแฟล็ก --enable-persistent-cookiesเพื่อให้ทำงานได้
เมื่อคุณต้องการใช้ wget เพื่อดาวน์โหลดไฟล์บางไฟล์จากเว็บไซต์ที่ต้องเข้าสู่ระบบคุณเพียงแค่ต้องมีไฟล์คุกกี้ เพื่อสร้างไฟล์คุกกี้ฉันเลือก lynx คมเป็นเว็บเบราเซอร์ข้อความ ก่อนอื่นคุณต้องมีไฟล์กำหนดค่าสำหรับ lynx เพื่อบันทึกคุกกี้ สร้างไฟล์ lynx.cfg เขียนการกำหนดค่าเหล่านี้ลงในไฟล์
SET_COOKIES:TRUE
ACCEPT_ALL_COOKIES:TRUE
PERSISTENT_COOKIES:TRUE
COOKIE_FILE:cookie.file
จากนั้นเริ่มต้นคมด้วยคำสั่งนี้:
lynx -cfg=lynx.cfg http://the.site.com/login
หลังจากที่คุณป้อนชื่อผู้ใช้และรหัสผ่านแล้วเลือก 'เก็บฉันไว้ในพีซีเครื่องนี้' หรือสิ่งที่คล้ายกัน หากเข้าสู่ระบบสำเร็จคุณจะเห็นเว็บเพจข้อความสวยงามของเว็บไซต์ และคุณออกจากระบบ ในไดเรกทอรีปัจจุบันคุณจะพบไฟล์คุกกี้ชื่อเป็น cookie.file นี่คือสิ่งที่เราต้องการเพื่อ wget
จากนั้น wget สามารถดาวน์โหลดไฟล์จากเว็บไซต์ด้วยคำสั่งนี้
wget --load-cookies ./cookie.file http://the.site.com/download/we-can-make-this-world-better.tar.gz
ตัวอย่างการดาวน์โหลดด้วยwgetบนเซิร์ฟเวอร์ลิงก์ไฟล์ขนาดใหญ่ที่สามารถรับได้ในเบราว์เซอร์ของคุณ
ตัวอย่างการใช้ Google Chrome
เข้าสู่ระบบที่คุณต้องการและกดดาวน์โหลด ไปดาวน์โหลดและคัดลอกลิงค์ของคุณ
จากนั้นเปิดDevToolsบนหน้าที่คุณเข้าสู่ระบบไปที่คอนโซลและรับคุกกี้โดยป้อนdocument.cookie
ตอนนี้ไปที่เซิร์ฟเวอร์และดาวน์โหลดไฟล์ของคุณ: wget --header "Cookie: <YOUR_COOKIE_OUTPUT_FROM_CONSOLE>" <YOUR_DOWNLOAD_LINK>