2012-07-05 29 views
1

我想要做的代码连接代理需要密码和用户名认证(ip:端口:用户名:pw)的C++程序我有http工作,但是当我使用https我总是得到一个407错误。无法发送代理凭据(407)

如何以正确的方式在https上发送代理凭据? (C++)

回答

3

那么这很好,因为状态407意味着代理需要认证。

所以,你可以使用这个:

case 407: 
      // The proxy requires authentication. 
      printf("The proxy requires authentication. Sending credentials...\n"); 

      // Obtain the supported and preferred schemes. 
      bResults = WinHttpQueryAuthSchemes(hRequest, 
       &dwSupportedSchemes, 
       &dwFirstScheme, 
       &dwTarget); 

      // Set the credentials before resending the request. 
      if(bResults) 
       dwProxyAuthScheme = ChooseAuthScheme(dwSupportedSchemes); 

      // If the same credentials are requested twice, abort the 
      // request. For simplicity, this sample does not check 
      // for a repeated sequence of status codes. 
      if(dwLastStatus == 407) 
       bDone = TRUE; 
      break; 

功能

DWORD ChooseAuthScheme(DWORD dwSupportedSchemes) 
    { 
// It is the server's responsibility only to accept 
// authentication schemes that provide a sufficient 
// level of security to protect the servers resources. 
// 
// The client is also obligated only to use an authentication 
// scheme that adequately protects its username and password. 
// 
// Thus, this sample code does not use Basic authentication 
// becaus Basic authentication exposes the client's username 
// and password to anyone monitoring the connection. 

if(dwSupportedSchemes & WINHTTP_AUTH_SCHEME_NEGOTIATE) 
    return WINHTTP_AUTH_SCHEME_NEGOTIATE; 
else if(dwSupportedSchemes & WINHTTP_AUTH_SCHEME_NTLM) 
    return WINHTTP_AUTH_SCHEME_NTLM; 
else if(dwSupportedSchemes & WINHTTP_AUTH_SCHEME_PASSPORT) 
    return WINHTTP_AUTH_SCHEME_PASSPORT; 
else if(dwSupportedSchemes & WINHTTP_AUTH_SCHEME_DIGEST) 
    return WINHTTP_AUTH_SCHEME_DIGEST; 
else 
    return 0; 
    } 

这就决定了认证方案.....之后,你使用

bResults = WinHttpSetCredentials(hRequest, 
     WINHTTP_AUTH_TARGET_SERVER, 
     dwProxyAuthScheme, 
     username, 
     password, 
     NULL); 

希望这有助于...我也与这些连接到Azure市场的微软翻译,因为它移动到那里和f rom八月所有的旧翻译者都不会得到请求。对我来说,它是通过标题发送验证密钥。但我想你有一个用户名和密码。

+0

非常感谢您的帮助! –