Làm cách nào để sử dụng wget / curl để tải xuống từ trang tôi đang đăng nhập?


46

Một số phần của wikipedia xuất hiện khác nhau khi bạn đăng nhập. Tôi muốn quên trang người dùng để chúng xuất hiện như thể tôi đã đăng nhập.

Có cách nào tôi có thể quên các trang người dùng như thế này không

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

đây là trang đăng nhập:

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


Xem stackoverflow.com/a/21919431/1136018 để biết giải pháp dễ dàng bằng Google Chrome + cURL
pterojacktyl

Câu trả lời:


50

Cách dễ dàng: đăng nhập bằng trình duyệt của bạn và cung cấp cookie để wget

Phương pháp dễ nhất: nói chung, bạn cần cung cấp wget hoặc curl với cookie (đã đăng nhập) từ một trang web cụ thể để họ tìm nạp các trang như thể bạn đã đăng nhập .

Nếu bạn đang sử dụng Firefox, thật dễ dàng thực hiện thông qua tiện ích Xuất cookie . Cài đặt tiện ích bổ sung và:

  1. Chuyển đến Công cụ ... Xuất Cookies và lưu cookies.txttệp (bạn có thể thay đổi tên tệp / đích).
  2. Mở một thiết bị đầu cuối và sử dụng wgetvới --load-cookies=FILENAMEtùy chọn, ví dụ:

    wget --load-cookies=cookies.txt http://en.wikipedia.org/wiki/User:A
    • Đối với curl , nócurl --cookie cookies.txt ...

(Tôi sẽ cố gắng cập nhật câu trả lời này cho người dùng Chrome / Chromium)

Cách khó: sử dụng curl (tốt nhất) hoặc wget để quản lý toàn bộ phiên

  • Cách thực hiện chi tiết nằm ngoài phạm vi của câu trả lời này, nhưng bạn sử dụng curl với --cookie-jarhoặc wget với các --save-cookies --keep-session-cookiestùy chọn, cùng với phương thức PUT HTTP / S để đăng nhập vào trang web, lưu cookie đăng nhập và sau đó sử dụng chúng để mô phỏng một trình duyệt.
  • Không cần phải nói, điều này đòi hỏi phải đi qua nguồn HTML cho trang đăng nhập (lấy tên trường nhập, v.v.) và thường rất khó để làm việc cho các trang web bằng cách sử dụng bất cứ điều gì ngoài xác thực đăng nhập / mật khẩu đơn giản.
  • Mẹo: nếu bạn đi theo tuyến đường này, việc xử lý phiên bản di động của trang web (nếu có) sẽ đơn giản hơn nhiều , ít nhất là cho bước xác thực.

1
Mẹo hay. Mã cho trang web di động thường sạch hơn.
CousinCocaine

4
cookie.txt như thế nào?
Frederick Nord

Tiện ích "Xuất cookie" này đã tạo một tệp cookie với cookie cho mọi trang web tôi đã truy cập trong Firefox. Vì vậy, nếu bạn làm theo câu trả lời này, bạn sẽ trình bày tất cả các cookie của mình cho bất kỳ trang web nào bạn đang truy cập. Tôi coi đây là một lỗ hổng bảo mật trong câu trả lời này. Bạn có thể dễ dàng giải quyết vấn đề này bằng cách sử dụng: grep mydomain cookies.txt > mydomain-cookies.txt
erik.weathers


Bạn có thể sử dụng tiện ích Trình quản lý cookie trong Firefox để chỉ xuất các cookie đã chọn.
Hans Ginzel

7

Một giải pháp dễ dàng khác làm việc cho tôi mà không cần cài đặt thêm:

Điều này sẽ cung cấp cho bạn một lệnh mà bạn có thể dán trực tiếp vào vỏ của mình, có tất cả thông tin đăng nhập cookie của bạn, vd

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

Sau đó, bạn có thể sửa đổi URL trong lệnh để tìm nạp bất cứ thứ gì bạn muốn.


4

Với cURL thực sự dễ dàng để xử lý cookie theo cả hai cách.

curl www.target-url.com -c cookie.txtsau đó sẽ lưu một tệp có tên cookie.txt. Nhưng bạn cần đăng nhập, vì vậy cần sử dụng --data với các đối số như : curl -X --data "var1=1&var2=2" www.target-url.com/login.php -c cookie.txt. Khi bạn nhận được cookie đã đăng nhập, bạn có thể gửi nó bằng: curl www.target-url.com/?user-page.php -b cookie.txt

Chỉ cần sử dụng -c (--cookie) hoặc -b (--cookie-jar) để lưu và gửi.

Lưu ý1: Sử dụng cURL CLI dễ dàng hơn nhiều so với PHP và có thể nhanh hơn;)

Để lưu nội dung cuối cùng, bạn có thể dễ dàng thêm > filename.htmlvào lệnh cURL của mình sau đó lưu mã html đầy đủ.

Note2 về "đầy đủ": Yo không thể kết xuất javascript bằng cURL, chỉ cần lấy mã nguồn.


1
-Xtham số là viết tắt của "do post", nhưng sử dụng --data=xxx -Xlà ẩn, vì vậy bạn có thể loại bỏ nó một cách chắc chắn.
erm3nda

-bread cookie
Timo

3

Đối với những người vẫn quan tâm đến câu hỏi này, có một tiện ích mở rộng Chrome rất hữu ích có tên CurlWGet cho phép bạn tạo wget/ curlyêu cầu bằng các biện pháp xác thực, v.v. chỉ bằng một cú nhấp chuột. Để cài đặt tiện ích mở rộng này, hãy làm theo các bước dưới đây:

  1. Cài đặt tiện ích mở rộng từ Cửa hàng Chrome trực tuyến .
  2. Truy cập trang web mà bạn muốn tải xuống.
  3. Bắt đầu tải xuống.
  4. Phần mở rộng sẽ tạo ra một liên kết cho bạn.

Thưởng thức!


2

Bài đăng trên blog Wget with Firefox Cookies cho thấy cách truy cập tệp dữ liệu sqlite trong đó Firefox lưu trữ cookie của nó. Bằng cách đó, người ta không cần phải xuất cookie thủ công để sử dụng với wget. Một nhận xét cho thấy rằng nó không hoạt động với cookie phiên, nhưng nó hoạt động tốt cho các trang web tôi đã thử.


2

hãy xem cliget cho Firefox.

Khi bạn sắp tải xuống, trên hộp thoại tải xuống cuối cùng, bạn có tùy chọn sao chép tải xuống dưới dạng dòng lệnh curl vào bảng tạm.


1

Bạn đã thử điều này?

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

có - không may là nó không hoạt động = (
user784637

6
Lưu ý: cú pháp này chỉ hoạt động cho xác thực HTTP cơ bản (trong đó trình duyệt của bạn bật lên hộp thoại Tên người dùng / Mật khẩu đặc biệt), không phải cho xác thực dựa trên trang web.
ish

Định dạng url xác thực HTTP cơ bản là admin: admin@www.url.com nhưng như @izx đã nói, HTTP cơ bản là tính năng trình duyệt, không phải lập trình PHP cũng không phải mã. Nếu một ngày nào đó bạn cần truy cập một url được bảo vệ htaccess, bạn có thể sử dụng chế độ đó; D
erm3nda

Tôi đã không downvote, nhưng đây không phải là một cách tốt để xác thực: nếu bạn, tình cờ công khai các tập lệnh như vậy, mọi người có thể sử dụng mật khẩu của bạn.
Willem Van Onsem

1
Những gì với downvote? Có thể không phải là một câu trả lời tất cả nhưng vẫn là một câu trả lời.
Mã hóa

1

Hãy thử một cái gì đó như:

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

Xem thêm liên kết này:

Làm thế nào để tải xuống trang web này với wget?


Cũng giống như bất kỳ đầu ra. Sử dụng > filename.htmlđể lưu đầu ra ở thư mục hiện tại hoặc đặt một filepath hoàn chỉnh. Điều này áp dụng cho cả hệ thống Linux và Windows.
erm3nda

Vì vậy, tôi thấy rằng wget có nhiều tính năng như cURL hoặc viceversa. Nó có thể làm POST, vì vậy nó có thể đăng nhập vào các trang web. Hấp dẫn.
erm3nda

1

Đối với các thông tin đăng nhập dựa trên trang web phức tạp hơn, bạn cũng nên xem xét sử dụng tập lệnh Python và một số mô-đun bắt chước trình duyệt, như http://wwwsearch.sourceforge.net/mechanize/ thay vì curlhoặc wget.

Bằng cách này, cookie phiên được xử lý tự động, bạn có thể theo liên kết và điền vào biểu mẫu đăng nhập và tự mình "tạo kịch bản" thông qua quy trình đăng nhập như thể sử dụng trình duyệt web của bạn.


Vâng, sử dụng cơ giới hóa có thể thực sự tốt đẹp. Ngoài ra (và ban đầu) có sẵn trong Perl, nếu đó là nhiều tách trà của bạn.
andol
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.