【问题标题】:How to convert cURL to libcurl(c)如何将 cURL 转换为 libcurl(c)
【发布时间】:2018-07-20 08:09:42
【问题描述】:

我有以下 cmd 及其工作。 - 使用摘要认证 - 使用 json 数据

curl -v --digest -u user:passwd -X POST http://192.168.139.65:80/digest/getMode -H "Content-Type: application/json" -d '{"Data":{}}'

我想将 cURL 转换为 libcurl。

curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.139.65:80/digest/getMode");
headerlist = curl_slist_append(headerlist, "Content-Type: application/json");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
curl_easy_setopt(curl, CURLOPT_USERPWD, "user:passwd ");
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"Data\":\t{}\r\n}");

curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

但是我失败了,它返回401。有没有遗漏?感谢您的帮助

【问题讨论】:

  • 您的选项似乎正确。但是,“passwd”后面有一个空格。它不应该是“user:passwd”而不是“user:passwd”吗?另外,我认为使用CURLOPT_CUSTOMREQUEST 是多余的——因为使用CURLOPT_POSTFIELDS 应该自动将请求类型设置为POST。

标签: curl libcurl


【解决方案1】:

只需在 curl 命令后添加 --libcurl -filename.c。这将创建一个 C 源文件,执行与 curl 命令完全相同的操作。

【讨论】:

    【解决方案2】:

    最后,我检查了两种方法之间的不同消息。我发现在 cURL 中使用了 TCP_NODELAY 和 USERAGENT。我需要添加这两个命令。

    【讨论】:

    • 当上面的 @jodh 实际上给了你正确的答案时,接受你自己的(完全错误的)答案是相当粗鲁的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-01
    • 2019-03-25
    • 2011-01-20
    • 1970-01-01
    • 2016-04-18
    • 2021-02-14
    相关资源
    最近更新 更多