我正在尝试连接到最新的皇家邮政API V4以获得基于C和libcurl中现有工作代码的令牌,以连接到V3。我有一个curl示例脚本,它使用--data-urlencode获取一个令牌,返回一个令牌。
curl -k --location 'https://authentication.proshipping.net/connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=AAAAAAA' \
--data-urlencode 'client_secret=BBBBBBBBB' \
--data-urlencode 'grant_type=client_credentials'
字符串
我在C和libcurl中尝试了以下操作
curl_easy_setopt(hnd, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_easy_setopt(hnd, CURLOPT_URL, "https://authentication.proshipping.net/connect/token");
curl_easy_setopt(hnd, CURLOPT_POST, TRUE);
headers = curl_slist_append(headers, "Content-Type: application/x-www-form-urlencoded");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);
postfields = curl_slist_append(postfields, "client_id=AAAAAAA");
postfields = curl_slist_append(postfields, "client_secret=BBBBBBBBB");
postfields = curl_slist_append(postfields, "grant_type=client_credentials");
curl_easy_setopt(hnd, CURLOPT_POSTFIELDS, postfields);
curl_easy_setopt(hnd, CURLOPT_WRITEFUNCTION, writefunc);
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, &s);
res = curl_easy_perform(hnd);
型
但是libcurl示例返回输出
{"error":"invalid_client"}
型
有人能在libcurl中使用--data-urlencode或等效命令吗?谢啦,谢啦
1条答案
按热度按时间krcsximq1#
似乎没有一个easy option可以模仿
--data-urlencode
的全部功能,其中包括使用特殊语法加载和编码文件的功能,还可以将其参数连接起来形成一个blob。用于对以空值结尾的字节字符串进行URL编码的库函数是
curl_easy_escape
。当使用者使用完之后,产生的字串必须传递至curl_free
。字符串
data_urlencode
(实现--data-urlencode
)使用curl_easy_escape
。)*至于
CURLOPT_POSTFIELDS
,型
第三个参数应该是以空值结尾的字节字符串(默认情况下;可以使用
CURLOPT_POSTFIELDSIZE
手动调整大小)。根据您的示例,
--libcurl
生成:型
另请参阅:http-post.c。
对
--data-urlencode
最基本功能(name=content
语法)的一个模糊的模仿大概是:型
结果如下:
型
这是 * 大致 *
型
--data-urlencode
实现了RFC1866中所述的' '
=>'+'
转换。)*另外:还有
CURLOPT_MIMEPOST
,可用于 * 多部分/表单数据 *。