У меня есть следующая задача: загрузите файл с помощью HTTPS и аутентификации. Инди кажется способом пойти, но по некоторым причинам это не работает до сих пор. Я имею в распоряжении следующее:
Сайт также требует аутентификации, и среди меня был пользователь/передача в URL как в примере ниже. Короче говоря это - код:
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);
С помощью этого кода я получаю "Тайм-аут Чтения" исключение EIdReadTimeout очень быстро. Тестирование URL в браузере работает без проблемы. Какие-либо идеи о том, что отсутствует или что я сделал неправильно?
Я окончательно отказался от Indy и OpenSSL и использовал для загрузки WinInet. Вот код, который у меня сработал:
function Download(URL, User, Pass, FileName: string): Boolean;
const
BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
F: File;
begin
Result := False;
hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0) ;
// Establish the secure connection
InternetConnect (
hSession,
PChar(FullURL),
INTERNET_DEFAULT_HTTPS_PORT,
PChar(User),
PChar(Pass),
INTERNET_SERVICE_HTTP,
0,
0
);
try
hURL := InternetOpenURL(hSession, PChar(URL), nil, 0, 0, 0) ;
try
AssignFile(f, FileName);
Rewrite(f,1);
try
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen) ;
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
finally
CloseFile(f) ;
Result := True;
end;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end;
end;
Я видел то же самое. Установка TIdHTTP.ReadTimeout на ноль решает проблему для меня.
...
HTTP.IOHandler := IOHandler;
HTTP.ReadTimeout := 0;
попробуйте
.insertAfter()
здесь
$(content).insertAfter('#bla');
-121--659434- попробуйте использовать метод after ()
:
$('#bla').after('<div id="space"></div>');
-121--659433- Все функции SSL, связанные с безопасными подключениями, завершатся ошибкой, если некоторые дополнительные библиотеки не будут установлены правильно.
2.) распакуйте и скопируйте обе DLL в папку проекта (или где-нибудь в PATH вашей системы)
с тем, чтобы ваш код из вопроса работал хорошо для меня.
-reinhard