Làm cách nào tôi có thể sử dụng công cụ dòng lệnh như Wget để đăng nhập vào trang web OpenID?


10

Cụ thể, tôi muốn có thể tải xuống một số trang nhất định từ hồ sơ người dùng của mình trên các trang web Stack Exchange khác nhau. Tuy nhiên, tôi muốn thực hiện việc này một cách tự động (sử dụng một croncông việc), từ dòng lệnh và ở định dạng có thể phân tích được. Tôi rất thích sử dụng Linux cho việc này, nhưng tôi có thể truy cập vào máy Mac hoặc Windows nếu cần thiết.

Lý tưởng nhất, tôi muốn sử dụng một công cụ như Wget hoặc cURL để tìm nạp các trang. Tôi không biết làm thế nào để vượt qua đăng nhập mặc dù. Tôi đã thấy các đề xuất đề cập rằng bạn có thể đăng nhập qua Firefox, xuất cookie có liên quan và nhập nó vào Wget thông qua --load-cookiestùy chọn của nó . Ví dụ ở đâyđây . Mặc dù điều này hoạt động nếu tôi vừa đăng nhập, nó không hoạt động sau một thời gian. Tôi đoán bởi vì mã thông báo ID phải được làm mới.

Vì vậy, ngay sau khi đăng nhập vào SU và xuất cookie của tôi, tôi có thể làm:

wget --load-cookies cookies.txt \
  https://superuser.com/users/151431/terdon?tab=responses

Sau một vài phút, tôi gặp lỗi 404:

wget -O ~/stack/$(date +%s) --load-cookies ~/cookies.txt \
   https://superuser.com/users/151431/terdon?tab=responses

--2013-08-06 04:04:14--  https://superuser.com/users/151431/terdon?tab=responses
Resolving superuser.com (superuser.com)... 198.252.206.16
Connecting to superuser.com (superuser.com)|198.252.206.16|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2013-08-06 04:04:15 ERROR 404: Not Found.

Vậy, làm thế nào tôi có thể tự động đăng nhập vào một trang web hỗ trợ OpenID từ dòng lệnh?


Tái bút Tôi nghĩ rằng điều này phù hợp hơn ở đây so với trong các ứng dụng web vì câu hỏi của tôi thực sự là về khía cạnh dòng lệnh và không phải là chi tiết thực tế của trang web được đề cập. Tôi đoán rằng mọi giải pháp sẽ được áp dụng cho tất cả các trang web OpenID .


3
Bạn đã xem xét API SE ( api.stackexchange.com ) để xem nó có cung cấp thông tin bạn đang tìm kiếm không? Đây là cách chính thức để có được chương trình truy cập dữ liệu và nó sử dụng OAuth để xác thực.
heavyyd

@ematvyd yeah, tôi đã hy vọng tôi sẽ không phải nghiên cứu sâu về API cho việc này. Nếu đó là cách duy nhất tôi đoán tôi sẽ phải làm. Từ cái nhìn lướt qua, nó không xuất hiện như thể tôi có thể tự động hóa quá trình đăng nhập thông qua API. Bạn có biết nếu tôi có thể xác thực theo cách không yêu cầu đầu vào hoạt động từ tôi không? Nếu tôi hiểu chính xác các tài liệu để nhận dữ liệu yêu cầu xác thực, tôi sẽ cần phải đăng nhập thủ công.
terdon

Tôi thực sự chưa sử dụng API SE, nhưng trong các triển khai OAuth khác, tôi đã sử dụng bạn đăng nhập một lần và bạn được cấp một mã thông báo tốt vô thời hạn.
heavyyd

Câu trả lời:


1

Bạn không thể, bởi vì Cookies thường xuyên làm mới. Đây là vì mục đích bảo mật, cách duy nhất bạn có thể làm điều này là cách bạn đã làm. ít nhất, từ sự hiểu biết của tôi.


Tôi chỉ thấy đây là một câu hỏi thực sự cũ .... Rất tiếc.
Maarten

-3

(Re-) Đọc trang man cho wgetvà xem các mô tả cho --user--passwordcờ.

Lưu ý rằng việc truyền mật khẩu dưới dạng đối số dòng lệnh không được khuyến nghị, vì bất kỳ ai chạy psđều có thể nhìn thấy mật khẩu . Cách tốt nhất là không lưu mật khẩu thô ở bất cứ đâu, nhưng cách tốt nhất tiếp theo là đặt nó vào một tệp mà chỉ chủ sở hữu mới có thể đọc.


3
Các cờ bạn đề cập là dành cho xác thực dựa trên HTTP (cơ bản, thông báo, v.v.). SE không sử dụng bất kỳ trong số này để xác thực. Họ dựa vào nhà cung cấp OpenID của bên thứ ba để xác thực.
heavyyd
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.