使用libcurl进行身份验证访问服务器

时间:2018-12-23 09:44:40

标签: c server libcurl

我正在尝试访问需要使用libcurl进行身份验证的公司内部网页。运行代码时,它显示为“ 401 UNAUTHORIZED”。我通过curl_easy_setopt(curl,CURLOPT_USERPWD,“ usr:pwd”)提供了登录凭据,但仍然收到上述消息。

我继续阅读,发现401表示它需要SERVER身份验证。但是,我没有收到任何可用的身份验证方案。我的winhttp配置设置在“自动检测”上。

int wmain()
{
    std::string content;

    curl_global_init(CURL_GLOBAL_ALL);
    CURL *curl = curl_easy_init();

    if (curl)
    {
        curl_easy_setopt(curl, CURLOPT_URL, "company internal URL");
        curl_easy_setopt(curl, CURLOPT_USERPWD, "usr:pwd");
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &content);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
        CURLcode code = curl_easy_perform(curl);
        curl_easy_cleanup(curl);
    }

    curl_global_cleanup();
    std::cout << content;
    std::cin.get();
    return 0;
}

我对使用libcurl非常陌生,并且在C / C ++方面的工作经验有限。感谢您的帮助以识别问题。谢谢!

1 个答案:

答案 0 :(得分:1)

尝试添加curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);

当然也应该替换"usr:pwd",但我认为您已经这样做了。

以下示例

https://curl.haxx.se/libcurl/c/CURLOPT_HTTPAUTH.html

CURL *curl = curl_easy_init();
if(curl) {
  CURLcode ret;
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
  /* allow whatever auth the server speaks */
  curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  curl_easy_setopt(curl, CURLOPT_USERPWD, "james:bond");
  ret = curl_easy_perform(curl);
}