Форум: "Сети";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
ВнизКак получить информацию по HTTPS? Найти похожие ветки
← →
Cyr © (2006-02-21 16:56) [0]Как получить информацию по HTTPS?
← →
seeker © (2006-02-21 17:22) [1]C помощью WinInet...
← →
umbra © (2006-02-21 18:19) [2]с помощью Indy
← →
Cyr © (2006-02-21 19:41) [3]А как проще?
Нужно, чтобы прога подключалась к сайту статистики провайдера, вводила имя и пароль, принимала сертификат, и скачивала статистику пользования инетом. А в будущем ещё и меняла тарифный план.
← →
Cyr © (2006-02-22 11:21) [4]Ну дык это невозможно реализовать?
← →
umbra © (2006-02-22 11:38) [5]что касается инди, то я не знаю, можно ли получить сертификат. Все остальное возможно. демо-проект можно скачать с http://adg.bmpcoe.org/IndySSL/Indy9SSLExample.zip
← →
Reindeer Moss Eater © (2006-02-22 11:47) [6]Сертификат сам приедет с сервера.
Вам останется только решить, доверять ему или нет.
← →
seeker © (2006-02-22 13:37) [7]Да, поист пользовать нехотим...
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;
← →
Cyr © (2006-02-22 14:19) [8]seeker, пробовал я ваш пример уже, перед тем как сюда писать.
Не работает.
Переходит в то место, где // не могу отослать запрос.
Reindeer Moss Eater, как программно безусловно принимать сертификат?
← →
Cyr © (2006-02-22 14:43) [9]Кстати, если сертификат один раз импортировать в файл .cer,
можно ли его использовать сразу при коннекте не дожидаясь повторного прихода от провайдера?
Думаю, что пример с Indy от umbra будет попроще, чем с WinInet...
← →
SergP. (2006-02-23 17:27) [10]
> Cyr © (22.02.06 14:19) [8]
> seeker, пробовал я ваш пример уже, перед тем как сюда писать.
>
> Не работает.
Странно.. Я пробовал тот-же пример.. У меня работает...
← →
Cyr © (2006-02-23 18:01) [11]SergP, видимо в вашем случае не требуется вводить имя и пароль.
У меня заработал вот этот пример:
http://forum.vingrad.ru/index.php?showtopic=63257&view=findpost&p=511957uses 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 отправлять данные...
← →
umbra © (2006-02-23 18:45) [12]точног так же, как и по HTTP, если уж соединение установлено
← →
seeker © (2006-02-24 13:20) [13]
> SergP, видимо в вашем случае не требуется вводить имя и
> пароль.
А пароль вводится в форме на странице или в выскакивающем окне?
← →
seeker © (2006-02-24 13:27) [14]это дя стандартных авторизаций.
...
FConnect := InternetConnect(FSession,
URLC.lpszHostName,
URLC.nPort,
lpszUserName,
lpszPassword,
INTERNET_SERVICE_HTTP,
0,
0);
...
← →
Cyr © (2006-02-25 16:02) [15]
> А пароль вводится в форме на странице или в выскакивающем
> окне?
В выскакивающем окне.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.011 c