![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как получить информацию по HTTPS? [D7, WinXP]
Cyr © (2006-02-21 16:56:00)Как получить информацию по HTTPS?
Cyr (2006-02-25 16:02:00) [1]
> А пароль вводится в форме на странице или в выскакивающем
> окне?
В выскакивающем окне.
seeker (2006-02-24 13:27:00) [2]это дя стандартных авторизаций.
...
FConnect := InternetConnect(FSession,
URLC.lpszHostName,
URLC.nPort,
lpszUserName,
lpszPassword,
INTERNET_SERVICE_HTTP,
0,
0);
...
seeker (2006-02-24 13:20:00) [3]
> SergP, видимо в вашем случае не требуется вводить имя и
> пароль.
А пароль вводится в форме на странице или в выскакивающем окне?
umbra (2006-02-23 18:45:00) [4]точног так же, как и по HTTP, если уж соединение установлено
Cyr (2006-02-23 18:01:00) [5]SergP, видимо в вашем случае не требуется вводить имя и пароль.
У меня заработал вот этот пример:
http://forum.vingrad.ru/index.php?showtopic=63257&view=findpost&p=511957
uses IdHTTP, IdSSLOpenSSL;
function GetSSLHttp(url, user, password, FileName: string; PortNum: integer=443):boolean;
var
http: TIdHTTP;
ssl: TIdSSLIOHandlerSocket;
ms: TMemoryStream;
begin
http := TIdHTTP.Create(nil);
ssl := TIdSSLIOHandlerSocket.Create(http);
ms := TMemoryStream.Create;
http.Port := PortNum;
http.IOHandler := ssl;
http.Request.Username := user;
http.Request.Password:=password;
http.Request.BasicAuthentication := true;
try
http.Get(url, ms);
result:=true;
ms.SaveToFile(FileName);
except
result :=false;
end;
ms.Free;
http.Free;
end;
Теперь ещё осталось разобраться, как по https отправлять данные...
SergP. (2006-02-23 17:27:00) [6]
> Cyr © (22.02.06 14:19) [8]
> seeker, пробовал я ваш пример уже, перед тем как сюда писать.
>
> Не работает.
Странно.. Я пробовал тот-же пример.. У меня работает...
Cyr (2006-02-22 14:43:00) [7]Кстати, если сертификат один раз импортировать в файл .cer,
можно ли его использовать сразу при коннекте не дожидаясь повторного прихода от провайдера?
Думаю, что пример с Indy от umbra будет попроще, чем с WinInet...
Cyr (2006-02-22 14:19:00) [8]seeker, пробовал я ваш пример уже, перед тем как сюда писать.
Не работает.
Переходит в то место, где // не могу отослать запрос.
Reindeer Moss Eater, как программно безусловно принимать сертификат?
seeker (2006-02-22 13:37:00) [9]Да, поист пользовать нехотим...
Uses ...WinInet, ...
...
function OpenURL(Metod, URL:string; Data:string=''; Header:string=''): string;
var
FSession, FConnect, FRequest: HINTERNET;
FMetod,FURL,FData,Cookies:string;
BytesRead,BuffSize:cardinal;
Buff:String;
dwFlag:Cardinal;
gotIt: boolean;
URLC:TURLComponents;
tout:Integer;
HostName,UrlPath:array[1..INTERNET_MAX_PATH_LENGTH] of char;
ExtraInfo:array[1..$ffff] of char;
begin
if trim(Metod) = '' then FMetod:='GET' else FMetod:=Trim(UpperCase(Metod));
Result:='';
if pos('://',URL)= 0 then
FURL:='http://'
else FURL:='';
FURL:=FURL+URL;
FillChar(URLC,SizeOf(TURLComponents),0);
with URLC do
begin
dwStructSize := sizeOf(TURLComponents);
lpSzExtraInfo := @ExtraInfo[1];
dwExtraInfoLength := INTERNET_MAX_PATH_LENGTH;
lpSzHostName := @HostName[1];
dwHostNameLength := INTERNET_MAX_PATH_LENGTH;
lpszUrlPath := @UrlPath[1];
dwUrlPathLength := INTERNET_MAX_PATH_LENGTH;
end;
InternetCrackUrl(PChar(FURL),0,ICU_ESCAPE, URLC);
FSession := InternetOpen('Delphi', INTERNET_OPEN_TYPE_PRECONFIG , nil, nil, 0);
if Assigned(FSession) then
begin
try
tout:=10*1000;
InternetSetOption(FSession, INTERNET_OPTION_RECEIVE_TIMEOUT,@tout,SizeOf(tout));
FConnect := InternetConnect(FSession,
URLC.lpszHostName,
URLC.nPort,
nil,
nil,
INTERNET_SERVICE_HTTP,
0,
0);
if Assigned(FConnect) then
begin
try
if URLC.nPort = 443 then
dwFlag := INTERNET_FLAG_SECURE
or INTERNET_FLAG_IGNORE_CERT_CN_INVALID
or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
else
dwFlag := 0;
dwFlag := dwFlag or INTERNET_FLAG_RELOAD;
StrCat(URLC.lpSzUrlPath, URLC.lpszExtraInfo);
URLC.lpSzExtraInfo := #0;
URLC.dwExtraInfoLength := 0;
if FMetod = 'GET' then
begin
if FData '' then
begin
if pos('?', URLC.lpszUrlPath) = 0 then
FData:='?'+FData
else
FData:='&'+FData ;
StrCat(URLC.lpszUrlPath,PAnsiChar(FData));
FData:='';
end;
end;
URLC.dwUrlPathLength:=length(URLC.lpszUrlPath);
FRequest := HttpOpenRequest(FConnect, PChar(FMetod), URLC.lpszUrlPath, 'HTTP/1.0',
nil,
nil,
dwFlag,
0);
if Assigned(FRequest) then
begin
if pos('?', URLC.lpSzExtraInfo) = 1 then
begin
inc(URLC.lpSzExtraInfo);
dec(URLC.dwExtraInfoLength);
end;
if FData '' then
begin
URLC.lpszExtraInfo:=PAnsiChar(FData);
FData:='';
end;
URLC.dwExtraInfoLength := length(URLC.lpSzExtraInfo);
if FMetod='POST' then
Header:='Content-Type: application/x-www-form-urlencoded';
if Cookies '' then
begin
if pos('Cookies: ',Cookies) = 0 then
if Header '' then
Header:=Header+ #13#10+'Cookie: '+Cookies
else
Header:='Cookie: '+Cookies ;
end;
try
if HttpSendRequest(FRequest,PChar(Header), Length(Header), URLC.lpszExtraInfo, URLC.dwExtraInfoLength) then
begin
//Read file
BuffSize:=1024;
repeat
BytesRead:=0;
SetLength(buff,BuffSize);
gotIt := InternetReadFile(FRequest, @Buff[1], BuffSize, bytesRead);
Setlength(Buff,BytesRead);
Result:=Result+Buff;
until (gotIt and (bytesRead = 0));
end
else
begin
// не могу отослать запрос
end;
finally
InternetCloseHandle(FRequest);
end;
end
else
begin
end;
finally
InternetCloseHandle(FConnect);
end;
end
else
begin
end;
finally
InternetCloseHandle(FSession);
end;
end
else
begin
end;
end;
Reindeer Moss Eater (2006-02-22 11:47:00) [10]Сертификат сам приедет с сервера.
Вам останется только решить, доверять ему или нет.
umbra (2006-02-22 11:38:00) [11]что касается инди, то я не знаю, можно ли получить сертификат. Все остальное возможно. демо-проект можно скачать с http://adg.bmpcoe.org/IndySSL/Indy9SSLExample.zip
Cyr (2006-02-22 11:21:00) [12]Ну дык это невозможно реализовать?
Cyr (2006-02-21 19:41:00) [13]А как проще?
Нужно, чтобы прога подключалась к сайту статистики провайдера, вводила имя и пароль, принимала сертификат, и скачивала статистику пользования инетом. А в будущем ещё и меняла тарифный план.
umbra (2006-02-21 18:19:00) [14]с помощью Indy
seeker (2006-02-21 17:22:00) [15]C помощью WinInet...