我在尝试发送我在C中创建的JSON对象时遇到问题。服务器可以很好地发送和接收数据。谈到C.,我是个业余爱好者
static int main_curl(neardal_record* pRecord)
{
CURL *curl;
CURLcode res;
char * record = pRecord->representation;
json_object *jobj = json_object_new_object();
json_object *jstring = json_object_new_string(record);
json_object_object_add(jobj,"id", jstring);
curl = curl_easy_init();
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept: application/json");
headers = curl_slist_append(headers, "Content-Type: application/json");
headers = curl_slist_append(headers, "charset: utf-8");
curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.43.20:5000/api/swipes");
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jobj);
curl_easy_setopt(curl, CURLOPT_USERAGENT, "libcrp/0.1");
printf ("The json object created:%s ",json_object_to_json_string(jobj));
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
curl_global_cleanup();
return res;
}
当打印出JSON对象时,我得到了这个->The json object created:{ "id": "hello, world" }
服务器响应如下
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error</title>
</head>
<body>
<pre>SyntaxError: Unexpected token in JSON at position 0<br> at JSON.parse
(<anonymous>)<br> at createStrictSyntaxError
(/Users/backend/node_modules/body-parser/lib/types/json.js:158:10)<br>
at parse (/Users/backend/node_modules/body-
parser/lib/types/json.js:83:15)<br> at
/Users/backend/node_modules/body-parser/lib/read.js:121:18<br>
at invokeCallback (/Users/backend/node_modules/raw-
body/index.js:224:16)<br> at done
(/Users/backend/node_modules/raw-body/index.js:213:7)<br>
at IncomingMessage.onEnd (/Users/backend/node_modules/raw-
body/index.js:273:7)<br> at IncomingMessage.emit (events.js:333:22)<br>
at endReadableNT (_stream_readable.js:1201:12)<br> at
processTicksAndRejections (internal/process/task_queues.js:84:21)</pre>
</body>
</html>
当用Wireshark拦截请求时,Post看起来是这样的POST请求响应错误如下错误请求400
我几乎可以肯定,这个错误是我构建JSON对象的方式,但如上所述,我对C非常陌生。如果我硬编码文本而不是对象,那么请求就是成功的。任何帮助都将不胜感激。谢谢
通过更改curl_easy_setopt(curl, CURLOPT_POSTFIELDS, jobj);
到这个curl_easy_setopt(curl, CURLOPT_POSTFIELDS, json_object_to_json_string(jobj));
如果我错了,请纠正我,但我假设我不能只发送一个JSON对象而不先将其转换为String。
如有任何进一步的建议,我们将不胜感激!