【问题标题】:POST JSON to url using CURL and C使用 CURL 和 C 将 JSON POST 到 url
【发布时间】:2014-04-12 18:21:28
【问题描述】:

我正在尝试将 JSON 数据从 bash 发布到 url,使用:

$ curl -v -d '{xxx:200}&apikey=xxxxx' -X POST http://localhost/xxxx/input/post.json -H "Accept: application/json" -H "Content-Type:application/json"

在 C 中使用以下内容:

int main(void)
{
CURL *easyhandle; 

curl_global_init(CURL_GLOBAL_ALL);
easyhandle = curl_easy_init();

if(easyhandle) {
char *data="json={xxx:200}&apikey=xxxxx";   
curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, data);   
curl_easy_setopt(easyhandle, CURLOPT_URL, "http://localhost/xxxx/input/post.json");
curl_easy_perform(easyhandle); 


curl_easy_cleanup (easyhandle);
}

curl_global_cleanup();

return 0;
}

这实际上是我想要实现的目标:

http://localhost/xxxx/input/post.json?json={xxx:200}&apikey=xxxxx

它似乎不起作用。 :( 我是卷曲的新手。请帮忙。

谢谢!

【问题讨论】:

  • JSON 数据在发送前需要进行编码。我不记得这样做的 C 函数,但有一个谷歌。
  • @ScottMcGready 谢谢!我会调查的。只是想知道 bash 命令是否也有问题。
  • 好吧,试一下 HTML 实体的编码,然后看看错误是什么。必须先走路才能跑;)
  • @ScottMcGready 但无论如何在 GET 请求中发送 JSON 可能是个坏主意。

标签: c json bash curl libcurl


【解决方案1】:

幸运的是,我发送数据的服务器处理了 POST 和 GET 请求,所以有问题的代码就足够了。

其他有类似问题的人可以使用简单的解决方法(如果您的代码没有实时限制并且不是性能密集型的)。你可以使用 C 中的 system() fork 一个 bash 进程。这样可以避免编码的麻烦。

【讨论】:

    【解决方案2】:

    您尝试做的不是执行 POST 请求,而是执行 GET 请求。但是,我不确定这是一个好主意,因为 GET 参数的长度有限(大约为 2 kB 左右),并且 - 正如其他人已经提到的 - 它们需要被编码和解码以及所有时髦的东西这是颈部疼痛。

    指向 localhost 的 URL 表明您可以控制服务器代码。如果您使用 POST 参数而不是 GET 参数,则可以按原样使用当前代码(它设置请求的 POST 正文,这可能是正确的做法——因此您不必更改您的客户端代码,你只需要更改服务器代码。)

    【讨论】:

    • 非常感谢您的解释!我开始明白了。是的,我确实可以访问服务器代码,这是一个开源项目,但我自己没有做过任何 php 编程。所以,我现在先从 GET 请求开始。
    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    相关资源
    最近更新 更多