Проблемы с аутентификацией в Libcurl - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь использовать libcurl в C ++ для отправки запросов на URL.Когда я настраиваю запрос в командной строке с помощью curl, кажется, что он работает нормально:

curl -vvv -X POST -H "Authorization: <api key here>" -H "Content-Type:application/json" "<host>" --data-binary '<json data here>'

Ответ начинается примерно так:

> POST <host> HTTP/1.1
> Host: <host>
> User-Agent: curl/7.61.1
> Accept: */*
> Authorization: <api_key>
> Content-Type:application/json
> Content-Length: 80

Так что я могу видеть авторизациюотправляется правильно.

Когда я пытаюсь сделать подобное в C ++, используя библиотеку libcurl C, я не замечаю ">" перед заголовками запроса:

Код:

    struct curl_slist *chunk = NULL;
    chunk = curl_slist_append(chunk, "Authorization: <api_key>");
    chunk = curl_slist_append(chunk, "Content-Type:application/json");


    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
    curl_easy_setopt(curl, CURLOPT_URL, "<host>");

    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, chunk);
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "<json>");
    res =  curl_easy_perform(curl);
    curl_easy_cleanup(curl);

Ответ:

> POST <host> HTTP/1.1
Host: <host>
Accept: */*
Authentication: <api_key>
Content-Type:application/json
Content-Length: 97

Так что я даже не уверен, правильно ли обрабатываются или принимаются заголовки хостом.

Есть идеи?

Я получаю следующий ответ:

{
  "message": "No authorization header given",
  "code": 401
}

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

В вашей командной строке подробный вывод заголовок называется «Авторизация:».В вашем libcurl vebose выведите его «Аутентификация:».Авторизация! = Аутентификация?

Подробный вывод:

Это только другой формат вывода для подробного текста между командной строкой и libcurl.Заголовки отправлены.Тот же формат вывода используется, например, php curl.Только первая строка имеет ">", а затем все последующие заголовки не имеют ">".Но они все представлены.

Пример вывода PHP curl подробный:

*   Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 80 (#0)
> GET /XXX/api.php HTTP/1.1
Host: localhost
Accept: */*
Authorization: XXX
Content-Type: application/json

< HTTP/1.1 200 OK
< Date: Mon, 31 Dec 2018 20:12:51 GMT
< Server: Apache/2.4.34 (Win32) OpenSSL/1.1.0i PHP/7.2.10
< X-Powered-By: PHP/7.2.10
< Content-Length: 2390
< Content-Type: text/html; charset=UTF-8
< 
* Connection #0 to host localhost left intact
0 голосов
/ 31 декабря 2018

Неверный заголовок.Должно быть Авторизация, а не Аутентификация.

...