Доступ к серверу с аутентификацией с использованием libcurl - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь получить доступ к внутренней веб-странице компании, которая требует аутентификации с использованием libcurl.Когда код запускается, он говорит: «401 НЕСАНКЦИОНИРОВАН».Я предоставляю учетные данные для входа через 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 голосов
/ 23 декабря 2018

Попробуйте добавить 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);
}
...