我尝试使用使用NTLM身份验证的代理访问服务器。 问题是,即使我提供了正确的凭据(我已经使用Firefox和代理,端口,用户名和密码进行了测试)我收到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;
}
答案 0 :(得分:1)
阅读文档。 CURLOPT_HTTPAUTH
设置用于远程HTTP服务器的凭据,而不是代理:
传递一个long参数(设置为位掩码),告诉libcurl您希望它使用哪种身份验证方法与远程服务器通话。
...使用CURLOPT_USERPWD选项或CURLOPT_USERNAME和CURLOPT_PASSWORD选项设置实际名称和密码。
...
要使用代理进行身份验证,请参阅
CURLOPT_PROXYAUTH
。
使用CURLOPT_PROXYAUTH
指定代理身份验证方法(NTLM),并使用CURLOPT_PROXYUSERPWD
设置代理凭据。