CURL để truy cập một trang yêu cầu đăng nhập từ một trang khác


124

Tôi có 2 trang: xyz.com/axyz.com/b. Tôi chỉ có thể truy cập xyz.com/bnếu và chỉ khi tôi đăng nhập xyz.com/atrước. Nếu truy cập xyz.com/bmà không thông qua khác, tôi chỉ bị từ chối truy cập (không chuyển hướng để đăng nhập) thông qua trình duyệt. Khi tôi đăng nhập tại xyz.com/a, tôi có thể truy cập vào địa chỉ khác.

Vấn đề của tôi là thực hiện việc này bằng cách sử dụng lệnh curl. Tôi có thể đăng nhập thành công xyz.com/abằng cách sử dụng curl, nhưng sau đó thử xyx.com/bvà tôi bị từ chối quyền truy cập.

Tôi sử dụng như sau:

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

Tôi đã thử sử dụng dòng thứ hai có & không có phần người dùng / mật khẩu và vẫn không hoạt động. Cả hai trang đều sử dụng cùng một CA, vì vậy đó không phải là vấn đề. Bất kỳ đề xuất? Cảm ơn

Câu trả lời:


146

Trang web có thể sử dụng cookie để lưu trữ thông tin phiên của bạn. Khi bạn chạy

curl --user user:pass https://xyz.com/a  #works ok
curl https://xyz.com/b #doesn't work

curlđược chạy hai lần, trong hai phiên riêng biệt. Do đó, khi lệnh thứ hai chạy, các cookie được thiết lập bởi lệnh thứ nhất sẽ không khả dụng; nó giống như thể bạn đã đăng nhập vào trang atrong một phiên trình duyệt và cố gắng truy cập trang btrong một phiên khác.

Những gì bạn cần làm là lưu các cookie được tạo bởi lệnh đầu tiên:

curl --user user:pass --cookie-jar ./somefile https://xyz.com/a

và sau đó đọc lại chúng khi chạy phần thứ hai:

curl --cookie ./somefile https://xyz.com/b

Ngoài ra, bạn có thể thử tải xuống cả hai tệp trong cùng một lệnh, mà tôi nghĩ sẽ sử dụng cùng một cookie.


Điều này thật lạ vì khi tôi thử điều này, nó không hoạt động vì cookie được lưu trữ trong somefilecó chứa tham số đường dẫn ( /atrong trường hợp này) và nó không được chuyển tiếp đến cuộc gọi thứ hai. Nếu tôi chỉnh sửa cookie trong tệp và chỉ đặt dấu gạch chéo, nó sẽ hoạt động (cookie được chuyển tiếp đến cuộc gọi thứ hai). Bạn có biết liệu có thể ngăn việc lưu trữ đường dẫn trong tệp cookie không?
рüффп

124

Ngoài ra, bạn có thể muốn đăng nhập qua trình duyệt và nhận lệnh với tất cả các tiêu đề bao gồm cookie:

Mở tab Mạng của Công cụ dành cho nhà phát triển, đăng nhập, điều hướng đến trang cần thiết, sử dụng "Sao chép dưới dạng cURL".

ảnh chụp màn hình


12
Đây là một câu trả lời sâu sắc! Nó không trả lời câu hỏi trực tiếp, bởi vì nó chỉ ra cách trả lời nó.
bgStack 15

5
đó là một trong những câu trả lời hữu ích nhất. Nó thực sự cho phép bạn quan sát và hiểu ngay cả xác thực nhiều bước.
Pierre D

Tôi không biết về tính năng này bị chôn vùi trong những công cụ tuyệt vời đó. Siêu hữu ích!
Timothy C. Quinn

52

Sau một số googling, tôi tìm thấy điều này:

curl -c cookie.txt -d "LoginName=someuser" -d "password=somepass" https://oursite/a
curl -b cookie.txt https://oursite/b

Không biết nếu nó hoạt động, nhưng nó có thể dẫn bạn đi đúng hướng.


9
Điều này sẽ hiệu quả nếu bạn có một trang web mong đợi một biểu mẫu được gửi. Bạn sẽ cần phải xem nguồn và tìm hình ảnh <form> và xem tên của các trường là gì và URL nào cần được đăng lên. Bạn có thể sử dụng trình gỡ lỗi trình duyệt web của mình để tìm kiếm yêu cầu bài đăng để bạn có thể xem những gì đang được gửi. Điều đó dễ dàng hơn một chút.
stonefury

0

Câu trả lời của tôi là một bản sửa đổi của một số câu trả lời trước từ @JoeMills và @user.

  1. Nhận cURLlệnh đăng nhập vào máy chủ:

    • Tải trang đăng nhập cho trang web và mở ngăn Mạng của Công cụ dành cho nhà phát triển
      • Trong firefox, nhấp chuột phải vào trang, chọn 'Kiểm tra phần tử (Q)' và nhấp vào tab Mạng
    • Đi tới biểu mẫu đăng nhập, nhập tên người dùng, mật khẩu và đăng nhập
    • Sau khi bạn đã đăng nhập, hãy quay lại ngăn Mạng và cuộn lên trên cùng để tìm mục ĐĂNG. Nhấp chuột phải và chọn Sao chép -> Sao chép dưới dạng CURL
    • Dán nó vào một trình soạn thảo văn bản và thử nó trong dấu nhắc lệnh để xem nó có hoạt động không
      • Có thể một số trang web đã cứng rắn sẽ chặn loại giả mạo thông tin đăng nhập này mà sẽ yêu cầu thêm các bước bên dưới để vượt qua.
  2. Sửa đổi lệnh cURL để có thể lưu cookie phiên sau khi đăng nhập

    • Xóa mục nhập -H 'Cookie: <somestuff>'
    • Thêm vào sau curl bắt đầu-c login_cookie.txt
    • Hãy thử chạy lệnh curl cập nhật này và bạn sẽ nhận được một tệp mới 'login_cookie.txt'trong cùng một thư mục
  3. Gọi một trang web mới bằng cách sử dụng cookie mới này, yêu cầu bạn phải đăng nhập

    • curl -b login_cookie.txt <url_that_requires_log_in>

Tôi đã thử điều này trên Ubuntu 20.04 và nó hoạt động như một sự quyến rũ.

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.