Закачка из Интернета по протоколу https - возможно ли? - VB

Узнай цену своей работы

Формулировка задачи:

У компонента MsInet есть свойство "протокол" и одно из значений HTTPS (при этом порт автоматически ставится верно - 443). Но данные не скачиваются. Попытка вызвать API-функцию URLDownloadToFile тоже не приводят к результату. На StackOverflow нашел подходящий диалог: пользователь приводит пример попытки загрузить через https (не работает). Эксперт ему отвечает и приводит URL с http.

Решение задачи: «Закачка из Интернета по протоколу https - возможно ли?»

textual
Листинг программы
  1. Option Explicit
  2.  
  3. Private Declare Function InternetOpen Lib "wininet.dll" Alias "InternetOpenW" (ByVal sAgent As Long, ByVal lAccessType As Long, ByVal sProxyName As Long, ByVal sProxyBypass As Long, ByVal lFlags As Long) As Long
  4. Private Declare Function InternetOpenUrl Lib "wininet.dll" Alias "InternetOpenUrlW" (ByVal hOpen As Long, ByVal sURL As Long, ByVal sHeaders As Long, ByVal lLength As Long, ByVal lFlags As Long, ByVal lContext As Long) As Long
  5. Private Declare Function HttpQueryInfo Lib "wininet" Alias "HttpQueryInfoW" (ByVal hRequest As Long, ByVal dwInfoLevel As Long, lpBuffer As Any, ByRef lpdwBufferLength As Long, ByRef lpdwIndex As Long) As Long
  6. Private Declare Function InternetReadFile Lib "wininet.dll" (ByVal hFile As Long, sBuffer As Any, ByVal lNumBytesToRead As Long, lNumberOfBytesRead As Long) As Integer
  7. Private Declare Function InternetCloseHandle Lib "wininet.dll" (ByVal hInet As Long) As Integer
  8. Private Declare Function InternetSetFilePointer Lib "wininet" (ByRef hFile As Long, ByVal lDistanceToMove As Long, pReserved As Any, ByVal dwMoveMethod As Long, ByVal dwContext As Long) As Long
  9.  
  10. Private Const FILE_BEGIN                    As Long = 0
  11. Private Const INTERNET_OPEN_TYPE_PRECONFIG  As Long = 0
  12. Private Const INTERNET_FLAG_RELOAD          As Long = &H80000000
  13. Private Const HTTP_QUERY_CONTENT_LENGTH     As Long = 5
  14. Private Const HTTP_QUERY_FLAG_NUMBER        As Long = &H20000000
  15.  
  16. Private Sub Form_Load()
  17.     Dim hInternet   As Long
  18.     Dim hURL        As Long
  19.     Dim size        As Long
  20.     Dim arr()       As Byte
  21.     Dim ret         As Long
  22.  
  23.     hInternet = InternetOpen(StrPtr(App.ProductName), INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
  24.     If hInternet = 0 Then Exit Sub
  25.    
  26.     hURL = InternetOpenUrl(hInternet, StrPtr("https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa384238(v=vs.85).aspx"), 0, 0, INTERNET_FLAG_RELOAD, 0)
  27.     If hURL = 0 Then Exit Sub
  28.    
  29.     ret = HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH Or HTTP_QUERY_FLAG_NUMBER, size, Len(size), 0)
  30.     If ret = 0 Then Exit Sub
  31.    
  32.     ReDim arr(size - 1)
  33.    
  34.     InternetSetFilePointer hURL, 0, ByVal 0, FILE_BEGIN, 0
  35.    
  36.     ret = InternetReadFile(hURL, arr(0), size, 0)
  37.     If ret = 0 Then Exit Sub
  38.    
  39.     InternetCloseHandle hURL
  40.     InternetCloseHandle hInternet
  41.    
  42.     Debug.Print StrConv(arr(), vbUnicode)
  43.  
  44. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут