Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Libcurl获取响应”的;415不支持的媒体类型;但是使用Curl.exe可以很好地工作_C++_Curl_Libcurl - Fatal编程技术网

C++ Libcurl获取响应”的;415不支持的媒体类型;但是使用Curl.exe可以很好地工作

C++ Libcurl获取响应”的;415不支持的媒体类型;但是使用Curl.exe可以很好地工作,c++,curl,libcurl,C++,Curl,Libcurl,我不确定我做错了什么,但是在curl中使用命令时没有发生错误。即使声明了curl\u easy\u setopt(curl,CURLOPT\u HEADER,“Content-type:application/json”) 这是我的密码: curl_easy_setopt(curl, CURLOPT_URL, "https://zone1:50000/user/login"); curl_easy_setopt(curl, CURLOPT_POST, 1);

我不确定我做错了什么,但是在curl中使用命令时没有发生错误。即使声明了
curl\u easy\u setopt(curl,CURLOPT\u HEADER,“Content-type:application/json”)
这是我的密码:

    curl_easy_setopt(curl, CURLOPT_URL, "https://zone1:50000/user/login");
    curl_easy_setopt(curl, CURLOPT_POST, 1);
    curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");
    const std::string raw_json = R"json({ "username": "admin", "password": "password123"})json";

        Json::CharReaderBuilder builder {};
        auto reader = std::unique_ptr<Json::CharReader>( builder.newCharReader() );
        Json::Value root {};
        std::string errors {};
        const auto is_parsed = reader->parse( raw_json.c_str(),
                                              raw_json.c_str() + raw_json.length(),
                                              &root,
                                              &errors );
        if ( !is_parsed )
        {
            qDebug() << "ERROR: Could not parse! " << errors.c_str();
        }
        Json::FastWriter fastWriter;
        std::string output = fastWriter.write(root);
        qDebug() << "Parsed JSON:" << output.c_str();
    curl_easy_setopt(curl, CURLOPT_POSTFIELDS,output.c_str());
    curl_easy_setopt(curl, CURLOPT_HEADER, "Origin: https://zone1:50000");
    curl_easy_setopt(curl, CURLOPT_ENCODING, "Accept-Encoding: gzip, deflate, br");
    curl_easy_setopt(curl, CURLOPT_HEADER, "Accept-Language: en-US,en;q=0.9");
    curl_easy_setopt(curl, CURLOPT_HEADER, "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36");
    curl_easy_setopt(curl, CURLOPT_HEADER, "Content-Type: application/json");
    curl_easy_setopt(curl, CURLOPT_HEADER, "Accept: application/json, text/plain, */*");
    curl_easy_setopt(curl, CURLOPT_HEADER, "Referer: https://zone1:50000/login");
    curl_easy_setopt(curl, CURLOPT_HEADER, "Connection: keep-alive");
    res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, cookies);
    res = curl_easy_perform(curl);
我收到的答复是:

  • 找到主机区域1的捆绑包:0x11ce588[串行]

  • 不能多路复用,即使我们想

  • 重新使用现有连接!(#0)与主机分区1

  • 连接到1区(10.1.233.120)端口50000(#0) *>POST/user/login HTTP/1.1 主持人:1:50000 接受:/ 接受编码:接受编码:gzip,deflate,br 内容长度:44 内容类型:application/x-www-form-urlencoded

  • 上传已完全发送:44个字节中的44个

  • 将捆绑包标记为不支持多用途

您设置的标题都错了,CURLOPT_HTTPHEADER的标题列表不是char*,它是一种特殊的列表,请尝试

struct curl\u slist*list=NULL;
list=curl\u slist\u append(list,“接受语言:en-US,en;q=0.9”);
list=curl\u slist\u append(list,“内容类型:application/json”);
list=curl\u slist\u append(list,“Accept:application/json,text/plain,*/*”;
列表=curl\u slist\u append(列表,“引用者:https://zone1:50000/login");
list=curl\u slist\u append(列表,“连接:保持活动”);
curl_easy_setopt(curl,CURLOPT_标题,列表);
(...)
卷曲列表(列表);
(...)
另外,不要使用CURLOPT_HEADER设置
用户代理
,因为如果将来您执行多个请求,或者如果使用CURLOPT_FOLLOWLOCATION,curl将“忘记”用户代理,而使用CURLOPT_USERAGENT,因此curl不会忘记它:

curl_easy_setopt(curl,CURLOPT_USERAGENT,“Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/75.0.3770.100 Safari/537.36”);

我通过添加

curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
char* jsonObj = "{ \"username\" : \"admin\" , \"password\" : \"password123\" }";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,jsonObj );

感谢@hanshenrik指出为标题创建列表。

仍然有相同的结果
curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
char* jsonObj = "{ \"username\" : \"admin\" , \"password\" : \"password123\" }";
curl_easy_setopt(curl, CURLOPT_POSTFIELDS,jsonObj );