Как установить заголовок носителя авторизации в коде C ++ curl? Я получаю недостаточную авторизацию, даже если она работает в командной строке

Я пытаюсь получить код C ++, который использует библиотеку curl.h для выполнения запросов curl, которые требуют установки заголовка Authorization: Bearer. Я использую Linux Mint 18 (Ubuntu).

Я сделал этот запрос curl из командной строки, и он работает, это выглядит так:

curl -H "Content-Type: application/json" -H "Authorization: Bearer <my_token>" <my_url>

Выполнение этого возвращает действительный результат.

Тем не менее, я попытался написать эквивалентный код для этого в C ++, используя библиотеку curl.h, и я получил {"errorMessage":"Insufficient authorization to perform request."}

Вот код C ++, который я использовал:

#include <cstdlib>
#include <cstring>
#include <iostream>
#include <string>
#include <curl/curl.h>

using namespace std;

int main(int argc, char** argv)
{
CURL* curl = curl_easy_init();

if (!curl) {
cerr << "curl initialization failure" << endl;
return 1;
}

CURLcode res;

// the actual code has the actual url string in place of <my_url>
curl_easy_setopt(curl, CURLOPT_URL, <my_url>);

struct curl_slist* headers = NULL;
curl_slist_append(headers, "Content-Type: application/json");

// the actual code has the actual token in place of <my_token>
curl_slist_append(headers, "Authorization: Bearer <my_token>");

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

res = curl_easy_perform(curl);

if (res != CURLE_OK) {
cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << endl;
}

curl_easy_cleanup(curl);

return 0;
}

Я также попытался использовать строку, которая выглядит следующим образом:

curl_easy_setopt(curl, CURLOPT_XOAUTH2_BEARER, <my_token>);

вместо этой строки:

curl_slist_append(headers, "Authorization: Bearer <my_token>");

Я также пытался добавить эти строки тоже раньше curl_easy_perform:

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);

а также

curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);

потому что я видел эти строки при поиске вокруг

Но все мои попытки выяснить, как заставить это работать, все еще оставляют меня с «errorMessage: недостаточная авторизация для выполнения запроса».

И да, кстати, я убедился, что и URL, и токен, который я использую, являются правильными.

Что я делаю неправильно, и как мне правильно перевести код командной строки вверху в эквивалентный код C ++.

4

Решение

Вам необходимо присвоить возвращаемое значение curl_slist_append() в headers в каждом звонке так:

headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "Authorization: Bearer <my_token>");

Увидеть этот документ

То, как вы это называете headers всегда останется NULL, и это то, что вы передаете curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

2

Другие решения

Других решений пока нет …