卷曲https://connect.insteon.com/api/v2/commands \ -X POST \ -H“内容类型:application / json”\ -H“身份验证:APIKey $ API_KEY”\ -H“授权:Bearer $ ACCESS_TOKEN” --data-binary'{“command”:“on”,“level”:75,“device_id”:67890}'
这是控制insteon设备的curl命令,它通过终端在linux机器上运行良好。
我试图使用CURL命令运行相同但是它会抛出错误。 如果有人可以帮助我以curl命令格式发送上述请求,那将会有很大的帮助。
段:
curl_easy_setopt(curl, CURLOPT_URL, "https://connect.insteon.com/api/v2/commands");
list = curl_slist_append(list, "Content-Type: application/json");
list = curl_slist_append(list,"Authentication: APIKey XXXXXX");
list = curl_slist_append(list,"Authorization: Bearer XXXXX");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
/*I tried both PUT and POST as well*/
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST"); /* !!! */
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,"--data-binary '{\"command\":\"on\",\"level\":75,\"device_id\":738486}'"); /* data goes here */
res = curl_easy_perform(curl);
if(res != CURLE_OK)
{
curl_easy_strerror(res);
}
curl_easy_cleanup(curl);
答案 0 :(得分:1)
这看起来并不那么糟糕。
一个错误:放弃--data-binary
:
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"command\":\"on\",\"level\":75,\"device_id\":738486}"); /* data goes here */
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, -1); /* curl uses strlen() to determine postfield-size */
这应该使它工作,否则简单地将--data-binary复制到post数据中;)
我假设您使用curl
正确初始化了curl_easy_init
,并将其留在了您的代码段中。
编辑:已添加CURLOPT_POSTFIELDSIZE
答案 1 :(得分:1)
将curl命令行转换为libcurl源代码的最简单方法:
curl [all the options] --libcurl source.c
- libcurl source.c 部分将生成您的源代码模板,其中的选项设置为curl命令行。这通常会让你几乎回家。