【发布时间】:2018-12-31 18:47:50
【问题描述】:
我正在尝试在 C++ 中使用 libcurl 向 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
}
【问题讨论】:
-
“>”显然是由
curl命令本身插入的。它们不属于HTTP。 -
确实如此,但我认为这将是详细程度给出的提示,即作为请求的一部分发送哪些参数集?
-
我不明白你的意思。 curl 命令显然会在 ">" 前面添加一个有用的指示,表明这是已发送的部分。而已。对此无话可说。
-
有趣,那么代码本身有什么可疑之处吗? API 密钥适用于 curl 但不适用于 libcurl...
-
好收获。这解决了它。结束问题。
标签: c++ authentication curl header libcurl