2015-03-13 94 views
0

我试图通过代理使用WinINet连接到HTTPS服务。我的代码如下所示:如何使用WinINet通过代理连接到HTTPS

hInternet = InternetOpenW(L"Test", INTERNET_OPEN_TYPE_PROXY,L"PROXY_IP:PROXY_PORT", L"<local>", 0); 

if (hInternet == NULL) 
{ 
    printf("InternetOpenW failed! Error code: %d\n", GetLastError()); 
} 
else 
{ 
    HINTERNET hConnect = InternetConnectW(hInternet, L"HTTPS_SERVICE_IP", 443, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0); 
    if (hConnect == NULL) 
    { 
     printf("InternetConnectW failed! Error code: %d\n", GetLastError()); 
    } 
    else 
    { 
     HINTERNET hRequest = HttpOpenRequestW(hConnect, NULL, L"", NULL, NULL, NULL, 0, 0); 
     if (hRequest == NULL) 
     { 
      printf("HttpOpenRequestW failed! Error code: %d\n", GetLastError()); 
     } 
     else 
     { 
      BOOL bRequestSent = HttpSendRequestW(hRequest, NULL, 0, NULL, 0); 
      if (!bRequestSent) 
      { 
       printf("HttpSendRequestW failed! Error code: %d\n", GetLastError()); 
      } 
      else 
      { 
       printf("Connection ok!\n"); 
      } 

      InternetCloseHandle(hRequest); 
     } 

     InternetCloseHandle(hConnect); 
    } 

    InternetCloseHandle(hInternet); 
} 

它将GET请求发送到代理,执行ntml身份验证,但连接失败。代理期望客户端发送CONNECT请求。如何发送CONNECT方法与该代码?

回答

0

您需要添加在您的通话HttpOpenRequestWINTERNET_FLAG_SECURE标志,比如这里:

HINTERNET hRequest = HttpOpenRequestW(hConnect, NULL, L"", NULL, NULL, NULL, INTERNET_FLAG_SECURE, 0); 

显然,在你身边的应用程序代码需要识别是否为你处理HTTP或HTTPS并添加此只在需要时才标志。

相关问题