Получение контента страницы через https

Тема в разделе "WASM.BEGINNERS", создана пользователем Swat2k, 27 янв 2010.

  1. Swat2k

    Swat2k Дима

    Публикаций:
    0
    Регистрация:
    14 май 2007
    Сообщения:
    64
    Нужно получить содержимое страницы через https . Для http функция нормально отрабатывает , а для ssl жалуется на неверный сертификат (выставлял много различных флагов) . Если у кого нить есть наводящие примеры под fasm or masm скиньте в пм . Всю ночь возился с этим , но так и не имел результат. Вот код функции
    Код (Text):
    1. ####################################################################################
    2. ;  Загружает в буффер указанную страницу   (Указатель на url,указатель на буффер,размер буффера)  #
    3. ####################################################################################
    4. GetHTTPData proc url:DWORD,buffy__:DWORD,buffy_len__:DWORD
    5. .data?
    6. AppName     db 256 dup(?)
    7. hSession    dd ?
    8. hUrl        dd ?
    9. Bufferlen   dd ?
    10. .code
    11. pusha
    12.     invoke GetModuleFileName, hInstance, addr AppName, sizeof AppName
    13.     invoke InternetOpen,addr AppName,INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
    14.     mov hSession, eax
    15.     .if hSession == INVALID_HANDLE_VALUE
    16.         mov eax, FALSE
    17.         ret
    18.     .endif
    19.     invoke InternetOpenUrl,hSession,url,0,0,0,INTERNET_FLAG_IGNORE_CERT_CN_INVALID or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID or INTERNET_FLAG_SECURE
    20.     mov hUrl, eax
    21.  
    22.     .if hUrl == INVALID_HANDLE_VALUE
    23.         mov eax, FALSE
    24.         ret
    25.     .endif
    26.     invoke GetLastError
    27.     invoke InternetReadFile,hUrl,buffy__,buffy_len__,addr Bufferlen
    28.         invoke InternetCloseHandle,hUrl
    29.         invoke InternetCloseHandle,hSession
    30. popa
    31. ret
    32. GetHTTPData endp
    ах да возвращает ERROR_INTERNET_INVALID_CA , флаги ставил непомогает
     
  2. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    Код (Text):
    1. function HttpsDownloadFileGET(Const szHost, szPath, szData : PChar) : string;
    2. const
    3.   dwBufSize = 1024 * 1024;
    4.  
    5.   var
    6.     hOpenHandle, hConnectHandle, hResourceHandle: Pointer;
    7.     Buff  : Pointer;
    8.     Cbyte : DWORD;
    9.     Flag, BuffLen : DWORD;
    10.   Begin
    11.  
    12.     result := '';
    13.     GetMem(Buff, dwBufSize);
    14.  
    15.     hOpenHandle:=InternetOpen('Mozilla/4.0 (compatible; MSIE 6.0; Windows XP 5.1)', PRE_CONFIG_INTERNET_ACCESS, nil, nil, 0);
    16.     If hOpenHandle<>nil then
    17.     Begin
    18.       hConnectHandle:=InternetConnect(hOpenHandle, szHost, INTERNET_DEFAULT_HTTPS_PORT, nil, nil, INTERNET_SERVICE_HTTP, 0, 0);
    19.       If hConnectHandle<>nil then
    20.       Begin
    21.         hResourceHandle:=HttpOpenRequest(hConnectHandle, 'GET', szPath, HTTP_VERSION, nil, nil,
    22.           INTERNET_FLAG_RELOAD or
    23.           INTERNET_FLAG_SECURE or
    24.           INTERNET_FLAG_IGNORE_CERT_CN_INVALID or
    25.           INTERNET_FLAG_IGNORE_CERT_DATE_INVALID, 0);
    26.         If hResourceHandle<>nil then
    27.           Begin
    28.               bufflen := SizeOf(Flag);
    29.               InternetQueryOption (hResourceHandle, INTERNET_OPTION_SECURITY_FLAGS, @Flag, BuffLen);
    30.               Flag := Flag or SECURITY_FLAG_IGNORE_UNKNOWN_CA;
    31.               InternetSetOption (hResourceHandle, INTERNET_OPTION_SECURITY_FLAGS, @Flag, sizeof (Flag));
    32.  
    33.               HttpSendRequest(hResourceHandle, 'Content-Type: application/x-www-form-urlencoded', 47, szData, Length(szData));
    34.  
    35.               InternetReadFile(hResourceHandle, Buff, dwBufSize, CByte);
    36.               Result := Copy(PCHAR(Buff), 1, cByte);
    37.  
    38.           End;
    39.         InternetCloseHandle(hResourceHandle);
    40.       End;
    41.     InternetCloseHandle(hConnectHandle);
    42.     End;
    43.    InternetCloseHandle(hOpenHandle);
    44.  
    45.    FreeMem(Buff);
    46. end;
    Местами кривовато сделано, но робит. под пивом писалось... :-P