2015-05-29 54 views
1

我試圖使用使用NTLM身份驗證的代理來訪問服務器。 問題是,即使我給出正確的憑據(我已經用Firefox和代理,端口,用戶名和密碼測試了它們),我收到407(代理需要身份驗證)。使用NTLM通過cURL進行代理驗證即使使用正確的憑據也會返回407

我試過使用CURLAUTH_NTLM,CURLAUTH_NTLM和兩者的邏輯組合,但仍然沒有。

我已經使用最新版本的cURL(7.42.1)和最新版本的openSSL(1.0.2)。

任何人都可以告訴我我做錯了什麼嗎?

這是我的C/C+++代碼:

int _main() 
{ 
    CURL *hCurl;  
    CURLcode curlCode; 

    char username[] = "domain\\user"; 
    char password[] = "pass"; 
    char proxy[] = "myproxy:8080"; 
    char url[] = "http://some_random_url.com"; 

    hCurl = curl_easy_init(); 
    if(hCurl) 
    { 
     curl_easy_setopt(hCurl, CURLOPT_URL, url); 

     curlCode = curl_easy_setopt(hCurl, CURLOPT_PROXYTYPE, CURLPROXY_HTTP); 
     curlCode = curl_easy_setopt(hCurl, CURLOPT_PROXY, proxy); 
     curlCode = curl_easy_setopt(hCurl, CURLOPT_HTTPAUTH, /*CURLAUTH_BASIC | */CURLAUTH_NTLM); 
     curlCode = curl_easy_setopt(hCurl, CURLOPT_PROXYUSERNAME, username); 
     curlCode = curl_easy_setopt(hCurl, CURLOPT_PROXYPASSWORD, password); 

     while(true) 
     { 
      curlCode = curl_easy_perform(hCurl); 
      /* Check for errors */ 
      if(curlCode != CURLE_OK) 
       fprintf(stderr, "curl_easy_perform() failed: %s\n", 
       curl_easy_strerror(curlCode)); 

      Sleep(3000); 
     } 

     curl_easy_cleanup(hCurl); 
    } 

    getchar(); 
    return 0; 

}

回答

1

閱讀文檔。 CURLOPT_HTTPAUTH設置用於遠程HTTP服務器的憑據,而不是代理:

傳遞一個長爲參數,它被設置爲一個位掩碼,告訴身份驗證方法()你想使用的說到這的libcurl到遠程服務器

...使用CURLOPT_USERPWD選項或使用CURLOPT_USERNAME和CURLOPT_PASSWORD選項設置實際的名稱和密碼。

...

對於代理驗證,請參閱CURLOPT_PROXYAUTH

使用CURLOPT_PROXYAUTH指定代理身份驗證方法(NTLM),並使用CURLOPT_PROXYUSERPWD設置代理憑據。

+0

你是一個拯救生命的人。我已經呆了好幾個小時了。我不知道我是如何設法編寫httpauth而不是proxyauth的。 – conectionist

相關問題