Tôi có nhiệm vụ sau: tải xuống tệp bằng HTTPS và xác thực. Indy dường như là con đường để đi nhưng vì một lý do nào đó nó không hoạt động cho đến nay. Tôi đã sau tại chỗ:Cách tải xuống tệp qua HTTPS bằng Indy 10 và OpenSSL?
- một thành phần TIdHTTP mà tôi sử dụng để tải về
- một thành phần TIdURI sử dụng để tạo ra các URL
- một thành phần TIdSSLIOHandlerSocketOpenSSL mà nên cung cấp các kết nối an toàn. Các DLL cần thiết nằm trong thư mục nhị phân.
Trang web cũng yêu cầu xác thực và tôi đã bao gồm người dùng/thẻ vào trong URL như trong ví dụ bên dưới. Trong ngắn hạn này là mã số:
URI := TIdURI.Create('https://test.example.com/');
URI.Username := ParamUserName;
URI.Password := ParamPassword;
HTTP := TIdHTTP.Create(nil);
if URI.Protocol = 'https' then
begin
IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
IOHandler.SSLOptions.Method := sslvSSLv3;
HTTP.IOHandler := IOHandler;
end;
HTTP.Get(URI.GetFullURI([ofAuthInfo]), FileStream);
Sử dụng mã này tôi nhận được một "Read Timeout" EIdReadTimeout ngoại lệ rất nhanh. Kiểm tra URL trong trình duyệt hoạt động không có vấn đề gì. Bất kỳ ý tưởng về những gì còn thiếu hoặc những gì tôi đã làm sai?
Có tường lửa/proxy nằm giữa ứng dụng và máy chủ không? 'Trình duyệt hoạt động' không có nghĩa là có kết nối Internet trực tiếp. – mjn
@mjustin Nếu tôi nhìn vào cài đặt trình duyệt thì không có proxy nào được xác định. Ngoài ra, thực tế là cách tiếp cận WinInet hoạt động mà không cần thiết lập bất kỳ proxy nói với tôi rằng đó không phải là vấn đề. – Tihauan
Không sử dụng các thuộc tính TIdURI.Username/password trong tình huống này. Thay vào đó, bạn phải sử dụng thuộc tính TIdHTTP.Username/Password. –