Как наиболее просто скачать файл по HTTPS ?

Тема в разделе "WASM.NETWORKS", создана пользователем zoool, 2 мар 2008.

  1. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    например, как самым простым способом слить https://www.wasm.ru/index.php ?

    Если можно, линк или кусок кода

    Всем откликнувшимся - респект
     
  2. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    http://www.google.com/search?q=WinInet+%2B+HTTPS
     
  3. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    Код (Text):
    1. HINTERNET hSession, hConnect, hReq;
    2. DWORD BytesRead, TotalRead, Result;
    3.    
    4.     Result=0;
    5.     TotalRead=0;
    6.     hSession = InternetOpen("Opera 5.22", INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0);
    7.     hConnect = InternetConnect(hSession,  "https://www.wasm.ru",  
    8.                                                INTERNET_DEFAULT_HTTPS_PORT, "", "",
    9.                                                INTERNET_SERVICE_HTTP, 0, 0);
    10.  
    11.     hReq = HttpOpenRequest (hConnect, 0, "/index.php", HTTP_VERSION, "", NULL,
    12.                     INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID, 0);
    13.     HttpSendRequest(hReq, 0, 0, 0, 0);
    14.     InternetReadFile(hReq, pOutBuf, 0x400, &BytesRead);
    Не работает
    HttpSendRequest(hReq, 0, 0, 0, 0); - возвращает ноль
    Гугл я заюзал первым делом
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Когда то давно писал.

    Код (Text):
    1. function GetPostPage(Len: PCardinal; Page: PChar; Post: PChar): PChar;
    2.  
    3. implementation
    4.  
    5. function DownloadPage(hPage: HINTERNET; Len: PCardinal): PChar;
    6. var
    7.  Ptr, bw: Cardinal;
    8. begin
    9.  result := GetMemory(1024 * 50);
    10.  Ptr := 0;
    11.  while true do
    12.   begin
    13.    if not InternetQueryDataAvailable(hPage, bw, 0, 0) then break;
    14.    if bw = 0 then break;
    15.    if Len <> nil then
    16.     Len^ := Ptr + bw;
    17.    if not InternetReadFile(hPage, Pointer(Cardinal(result) + Ptr), bw, bw) then break;
    18.    if bw = 0 then break;
    19.    Ptr := Ptr + bw;
    20.   end
    21. end;
    22.  
    23. function GetPostPage(Len: PCardinal; Page: PChar; Post: PChar): PChar;
    24. var
    25.  hInet: HINTERNET;
    26.  hServer: HINTERNET;
    27.  hPage: HINTERNET;
    28.  bw: Cardinal;
    29.  flag: Cardinal;
    30.  Hdr: PChar;
    31. begin
    32.  result := nil;
    33.  hInet := InternetOpen(BROWSER_IDENT, INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
    34.  if hInet = nil then
    35.   begin
    36.    DoError('InternetOpen() Error');
    37.    exit;
    38.   end;
    39.  
    40.  hServer := InternetConnect(hInet, SERVER_NAME, INTERNET_DEFAULT_HTTPS_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
    41.  if hServer <> nil then
    42.   begin
    43.  
    44.    flag := INTERNET_FLAG_SECURE or INTERNET_FLAG_IGNORE_CERT_CN_INVALID or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID
    45.     or INTERNET_FLAG_RELOAD;
    46.  
    47.    hPage := HttpOpenRequest(hServer, 'POST', Page, HTTP_VERSION, nil, nil, flag, 0);
    48.    if hPage <> nil then
    49.     begin
    50.      Hdr := 'Content-Type: application/x-www-form-urlencoded';
    51.  
    52.      if HttpSendRequest(hPage, Hdr, length(Hdr), Post, length(Post)) then
    53.       result := DownloadPage(hPage, Len)
    54.      else
    55.       begin
    56.        if GetLastError = 12045 then
    57.         begin
    58.          bw := 0;
    59.  
    60.          InternetQueryOption(hPage, INTERNET_OPTION_SECURITY_FLAGS, @Flag, bw);
    61.          Flag := Flag or SECURITY_FLAG_IGNORE_UNKNOWN_CA;
    62.          InternetSetOption(hPage, INTERNET_OPTION_SECURITY_FLAGS, @Flag, sizeof(Flag));
    63.  
    64.          if HttpSendRequest(hPage, Hdr, length(Hdr), Post, length(Post)) then
    65.           result := DownloadPage(hPage, Len)
    66.          else
    67.           DoError('HttpSendRequest() Error');
    68.         end
    69.        else
    70.         DoError('HttpSendRequest() Error');
    71.       end;
    72.      HttpEndRequest(hPage, nil, 0, 0);
    73.      InternetCloseHandle(hPage);
    74.     end
    75.    else
    76.     DoError('HttpOpenRequest() Error');
    77.    InternetCloseHandle(hServer);
    78.   end
    79.  else
    80.   DoError('InternetConnect() Error');
    81.  InternetCloseHandle(hInet);
    82. end;
     
  5. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    А я так писал когжа-то :) Всё отлично работало и работает.

    Код (Text):
    1. hInternet = InternetOpen("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)",INTERNET_OPEN_TYPE_PRECONFIG,0,0,0);
    2.     if (hInternet != 0)
    3.     {
    4.         hConnect = InternetConnect(hInternet,szServerName,INTERNET_DEFAULT_HTTPS_PORT,0,0,INTERNET_SERVICE_HTTP,0,1);
    5.         if (hConnect != 0)
    6.         {
    7.             hRequest = HttpOpenRequest(hConnect,"GET","/index.php",0,0,(LPCSTR*)"text/*",INTERNET_FLAG_KEEP_CONNECTION+INTERNET_FLAG_DONT_CACHE     +INTERNET_FLAG_SECURE+INTERNET_FLAG_RELOAD+INTERNET_FLAG_IGNORE_CERT_CN_INVALID+INTERNET_FLAG_IGNORE_CERT_DATE_INVALID,1);
    8.             if (hRequest != 0)
    9.             {
    10.                 DWORD dwFlags;
    11.                 DWORD dwBuffLen = sizeof(dwFlags);
    12.                 InternetQueryOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, (LPVOID)&dwFlags, &dwBuffLen);
    13.                 dwFlags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;
    14.                 InternetSetOption (hRequest, INTERNET_OPTION_SECURITY_FLAGS, &dwFlags, sizeof (dwFlags));
    15.                    
    16.                 LOG("Send request for session ID\n");
    17.                 BOOL bSend = HttpSendRequest(hRequest,0,0,sess_id,sizeof(sess_id));
     
  6. Richel

    Richel New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2009
    Сообщения:
    1
    Помогите пожалуйста! Простейший код выдает ошибку на линкинге.
    HINTERNET hInternetSession;
    hInternetSession = InternetOpen(
    (LPCWSTR)"Microsoft Internet Explorer", // agent
    (DWORD)INTERNET_OPEN_TYPE_PRECONFIG, // access
    NULL, NULL, 0); // defaults
    InternetCloseHandle(hInternetSession);

    Error LNK2001: unresolved external symbol __imp__InternetCloseHandle@4 main.obj
    Пользуюсь Visual Studio 2008.
     
  7. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Richel, ыыы, бегом в http://msdn.microsoft.com - смотришь ф-цию - там указана библиотека.
     
  8. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    http://msdn.microsoft.com/en-us/library/ms775123(VS.85).aspx
     
  9. int_13h

    int_13h New Member

    Публикаций:
    0
    Регистрация:
    15 дек 2008
    Сообщения:
    163
    Адрес:
    Красноряск
    Socket/Connect/Send/Recv xD
     
  10. pilulkin

    pilulkin New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2008
    Сообщения:
    7
    Ребят может кто обьяснит всетаки как избавиться от ошибки 12045 (Invalid Certificate) ?
    Код (Text):
    1. invoke InternetOpen,$CTA0("UserAgent 1.0"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0
    2. mov hInternet,eax
    3. .if eax != NULL
    4.     invoke InternetConnect,[hInternet],$CTA0("www.wasm.ru"),INTERNET_DEFAULT_HTTPS_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,1
    5.     mov  [hConnect],eax
    6.     .if eax != NULL
    7.         invoke HttpOpenRequest,[hConnect],$CTA0("GET"),$CTA0("/index.php"),$CTA0("HTTP/1.1"),NULL,NULL,INTERNET_FLAG_KEEP_CONNECTION or INTERNET_FLAG_SECURE or INTERNET_FLAG_IGNORE_CERT_CN_INVALID or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID or INTERNET_FLAG_NO_COOKIES,1
    8.         mov  [hRequest],eax
    9.         .if eax != NULL
    10.             invoke HttpSendRequest,[hRequest],0,0,0,0
    11.             .if eax == 1
    12.                 invoke InternetReadFile,[hRequest],addr iBuffer,1000,addr ByteWRite
    13.                 invoke MessageBox,0,addr iBuffer,0,0
    14.             .endif
    15.         .endif
    16.     .endif
    17. .endif 
    18. invoke GetLastError
    19. .if eax != 0
    20.     invoke wsprintf,addr szBuf,$CTA0("Error %d"),eax
    21.     invoke MessageBox,0,addr szBuf,0,0
    22. .endif
    23. invoke  InternetCloseHandle,hOpenUrl
    24. invoke  InternetCloseHandle,hConnect
    25. invoke  InternetCloseHandle,hInternet