我目前正在将预编译的minGW32库用于libcurl-7.21.6,C++,QT库,minGW32 Windows编译器(在QT创建器中)和QT创建器作为我的IDE。
我正在尝试发布一些http信息,但一直遇到问题。我需要从标题中删除Expect:100...。从我在网上看到的所有内容,

headerlist = curl_slist_append(headerlist, "Expect:");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);

应该做到这一点,但似乎被以下方面所废止:
curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

如果我在HTTPHEADER之前调用HTTPPOST,似乎HTTPHEADER会使HTTPPOST中的所有内容无效,反之亦然。

难道我做错了什么?应该将Expect:以某种方式包含在HTTPPOST中,而不是单独包含在HTTPHEADER中吗?
我试图摆脱Expect header ,因为服务器一直以Expectation Failed响应我的请求。

这是与curl.exe一起使用的curl命令,可以完成与libcurl相同的操作:
system("curl --referer http://192.168.16.23/upthefile.html -F [email protected] -F config=on http://192.168.16.23/cgi-bin/upload.cgi -H \"Expect:\">nul");

任何帮助将不胜感激。

最佳答案

使用cURL 7.25.0和以下代码段:

curl_global_init(CURL_GLOBAL_ALL);

struct curl_httppost *formpost = NULL;
struct curl_httppost *lastptr = NULL;
struct curl_slist *headerlist = curl_slist_append(NULL, "Expect:");

curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "field", CURLFORM_COPYCONTENTS, "value", CURLFORM_END);
CURL *curl = curl_easy_init();

if (curl)
{
    curl_easy_setopt(curl, CURLOPT_URL, "http://www.example.com/");
    curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);
    curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost);

    CURLcode res = curl_easy_perform(curl);

    curl_easy_cleanup(curl);
    curl_formfree(formpost);
    curl_slist_free_all(headerlist);
}

我收到以下请求(Wireshark'd):
POST / HTTP/1.1
Host: www.example.com
Accept: */*
Content-Length: 145
Content-Type: multipart/form-data; boundary=----------------------------523d686b5061
------------------------------523d686b5061
Content-Disposition: form-data; name="field"
value
------------------------------523d686b5061--

在省略curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist);行时, header 还包含:
HTTP/1.1 100 Continue

08-27 07:37