原因:libcurl post 发送超过1024字节数据后,会多出一个步骤,即询问是否能发送超过1024数据的包。但postman没有这个询问步骤。
如果想忽略此步骤,可以设置"Expect”为空,即"Expect:"
// http POST
CURLcode curl_post_req(const std::string &url, const std::string &postParams, std::string &response, std::string headflag, int timeout)
{
// init curl
CURL *curl = curl_easy_init();
// res code
CURLcode res;
if (curl)
{
struct curl_slist *head = NULL;
// set params
curl_easy_setopt(curl, CURLOPT_POST, 1); // post req
curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // url
if (!headflag.empty())
{
head = curl_slist_append(head, headflag.c_str());
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, head);
}
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postParams.c_str()); // params
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false); // if want to use https
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, false); // set peer and host verify false
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl, CURLOPT_READFUNCTION, NULL);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, req_reply);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response);
curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
//curl_easy_setopt(curl, CURLOPT_HEADER, 1);
curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, timeout);
curl_easy_setopt(curl, CURLOPT_TIMEOUT, timeout);
// start req
res = curl_easy_perform(curl);
if (!headflag.empty())
curl_slist_free_all(head);
}
// release curl
curl_easy_cleanup(curl);
return res;
}
调用:CURLcode res = curl_post_req("http://localhost:xxx/xxx/xxx.do", xxx, xxx, "Expect:", 120);