【问题标题】:libcurl specifying the headerlibcurl 指定标头
【发布时间】:2014-04-27 02:48:13
【问题描述】:

我目前正在为 libcurl-7.21.6、C++、QT 库、minGW32 windows 编译器(在 QT creator 中)和 QT creator 使用预编译的 minGW32 库作为我的 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 标头,因为服务器一直以 Expectation Failed 响应我的请求。

这是与 curl.exe 一起使用的 curl 命令,用于执行与 libcurl 相同的操作:

system("curl --referer http://192.168.16.23/upthefile.html -F uploadfile=@instructions.xml -F config=on http://192.168.16.23/cgi-bin/upload.cgi -H \"Expect:\">nul");

任何帮助将不胜感激。

【问题讨论】:

    标签: c++ qt curl


    【解决方案1】:

    使用 cURL 7.25.0 和这个 sn-p:

    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); 行,但标题还包含:

    HTTP/1.1 100 Continue
    

    【讨论】:

    • 嗯,我什么都试过了,但还是有问题。我将重新安装IDE,看看它是否有帮助。感谢您的帮助
    • 不要重新安装IDE,而是尝试编译可以重现问题的最小示例,然后从那里开始
    • 对超迟回复表示歉意。你的建议很有效!!对于其他使用 curl 的人来说,一件事是注意单线程应用程序中的超时。
    • 谢谢!这是最烦人的事情。
    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2018-10-19
    • 2017-09-02
    相关资源
    最近更新 更多