Sau khi xem rất nhiều, tôi đã tìm thấy một số giải pháp mà dường như làm việc, nhưng không phải cho tôi ...Làm cách nào để thực hiện xác thực cơ bản qua HTTP trong Ruby?
Ví dụ, tôi có kịch bản này:
require 'net/http'
require "net/https"
@http=Net::HTTP.new('www.xxxxxxx.net', 443)
@http.use_ssl = true
@http.verify_mode = OpenSSL::SSL::VERIFY_NONE
@http.start() {|http|
req = Net::HTTP::Get.new('/gb/PastSetupsXLS.asp?SR=31,6')
req.basic_auth 'my_user', 'my_password'
response = http.request(req)
print response.body
}
Khi tôi chạy nó, nó mang lại cho cho tôi một trang đó yêu cầu để xác thực, nhưng nếu tôi viết URL sau trong trình duyệt, tôi nhận được vào trang web mà không vấn đề:
https://my_user:[email protected]/gb/PastSetupsXLS.asp?SR=31,6
tôi cũng đã thử với mở uri:
module OpenSSL
module SSL
remove_const :VERIFY_PEER
end
end
OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE
def download(full_url, to_here)
writeOut = open(to_here, "wb")
writeOut.write(open(full_url, :http_basic_authentication=>["my_user", "my_password"]).read)
writeOut.close
end
download('https://www.xxxxxxx.net/gb/PastSetupsXLS.asp?SR=31,6', "target_file.html")
Nhưng kết quả là như nhau, trang web yêu cầu xác thực người dùng. Bất kỳ mẹo nào về những gì tôi đang làm sai ?. Tôi có phải mã hóa mật khẩu trong Base 64 không?
Bạn đã thử thêm tên người dùng và mật khẩu vào URL, giống như cách bạn sẽ đặt nó vào trình duyệt? –
Có, tất nhiên, nhưng cách đó không được hỗ trợ cho các thư viện đó. –