【发布时间】:2015-03-28 05:34:03
【问题描述】:
我正在使用libcurl 发送POST 请求,并尝试使用回调函数获得响应。下面是相关代码。
main ()
{
...
curl_global_init(CURL_GLOBAL_ALL);
CURL *curl = curl_easy_init ();
curl_easy_setopt(curl, CURLOPT_URL, url_string);
curl_easy_setopt(curl, CURLOPT_POST, 1);
if (strlen(query_string) > 0)
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, query_string);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &write_buffer);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCB);
CURLcode res = curl_easy_perform(curl);
if (CURLE_OK == res)
printf("response: %s\n", write_buffer.data);
else
printf("curl failed\n");
curl_easy_cleanup(curl);
curl_global_cleanup();
...
}
struct BufferType
{
Str data;
BufferType() {};
size_t Append(char *src, size_t size, size_t nmemb)
{
data.Append(Str(src, size * nmemb));
return size * nmemb;
}
};
size_t WriteCB(char *data, size_t size, size_t nmemb, BufferType *buffer)
{
printf("WriteCB: %s\n", data);
fflush(stdout);
return buffer->Append(data, size, nmemb);
}
当我启动程序时,我可以看到它已执行(服务器响应“200 OK”)。但是程序只是挂在那里,这是输出:
WriteCB: HTTP/1.1 100 Continue
WriteCB:
更多信息:如果我对其他 URL 使用 GET 方法,并将与 POST 相关的两行更改为
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
然后代码工作正常。
可能出了什么问题?
【问题讨论】:
-
"为了简洁起见,我在这里避免使用它。" 请展示它,以便有人可以确保它写得正确。
-
好的,看起来我还有一些额外的工作要做来处理“100 continue”,继续挖掘......但欢迎任何提示。谢谢。
-
libcurl 为您处理
100 Continue响应。您无需执行任何操作即可启用该逻辑。但是,如果要禁用它,可以使用CURLOPT_HTTPHEADER禁用Expect: 100-continue请求头(不推荐)。