我通过C代码中的libcurl向POST请求发送了错误的URL。服务器发回400以及包含有关为何拒绝请求的详细信息的响应。在libcurl中,我可以看到错误代码:
res CURLcode CURLE_HTTP_RETURNED_ERROR
我还可以通过以下方式查看协议错误:
char errbuf[CURL_ERROR_SIZE];
errbuf[0] = 0;
curl_easy_setopt(vc->curl, CURLOPT_ERRORBUFFER, errbuf);
/* Perform the request, resCode will get the return code */
CURLcode resCode = curl_easy_perform(vc->curl);
errbuf char [256] "The requested URL returned error: 400 Bad Request"
我真正想访问的是响应的正文。服务器会在其中放置有关为什么拒绝请求的详细错误信息:
[
{
"code": "io.myorg.bad.request",
"message": "Unrecognized query parameter 'count' with value: true.",
"params": []
}
]
我具有通过以下方式设置的读写回调函数:
/* ask curl to let us know if we get a 400 or higher */
curl_easy_setopt(vc->curl, CURLOPT_FAILONERROR, 1L);
curl_easy_setopt(vc->curl, CURLOPT_HTTPHEADER, vc->slist);
/* we want to use our own read/write function */
curl_easy_setopt(vc->curl, CURLOPT_READFUNCTION, read_callback);
curl_easy_setopt(vc->curl, CURLOPT_WRITEFUNCTION, write_callback);
/* pointer to pass to our callback functions */
curl_easy_setopt(vc->curl, CURLOPT_READDATA, vc);
curl_easy_setopt(vc->curl, CURLOPT_WRITEDATA, vc);
在这种情况下不会调用它们。如何获得响应消息中的json?
答案 0 :(得分:1)
启用CURLOPT_FAILONERROR
选项可防止在检测到错误时调用写回调。