Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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=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 отправлять данные...


 
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.51 MB
Время: 0.009 c
2-1149952843
ArchValentin
2006-06-10 19:20
2006.07.02
Иконки в ЕХЕшниках


2-1150208248
VitV
2006-06-13 18:17
2006.07.02
DBgrid нижний скролбар.


6-1140552050
Vangog
2006-02-21 23:00
2006.07.02
Отправить файл на сервер методом Post


8-1130929059
Provodnick
2005-11-02 13:57
2006.07.02
Проблема с тесселяцией многоугольника в OpenGL


15-1149410130
leonidus
2006-06-04 12:35
2006.07.02
В какую ветку реестра лучше писать настройки программы?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский