gpt4 book ai didi

c++ - Libcurl得到响应 “415 Unsupported Media Type”但使用Curl.exe可以很好地工作

转载 作者:行者123 更新时间:2023-12-03 07:22:27 29 4
gpt4 key购买 nike

我不确定自己做错了什么,但是在curl中使用命令时不会发生错误。即使已经声明了Content-Type: application/x-www-form-urlencoded,它仍将我的类型更改为curl_easy_setopt(curl, CURLOPT_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);
curl命令成功:
curl --cookie cookie.txt -k -g "https://zone1:50000/user/login" -H "Origin: https://zone1:50000" -H "Accept-Encoding: gzip, deflate, br" -H "Accept-Language: en-US,en;q=0.9" -H "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" -H "Content-Type: application/json" -H "Accept: application/json, text/plain, */*" -H "Referer: https://zone1:50000/login" -H "Cookie: JSESSIONID=Fn1" -H "Connection: keep-alive" --data-binary "{\"username\":\"admin\",\"password\":\"password\"}"
我收到的回复:
  • 找到主机zone1的 bundle 包:0x11ce588 [串行]
  • 即使我们想要也不能多路传输!
  • 重新使用现有连接! (#0)与主机zone1
  • 已连接到zone1(10.1.233.120)端口50000(#0)
    *> POST /用户/登录HTTP / 1.1
    主机:zone1:50000
    接受:/
    接受编码:接受编码:gzip,deflate,br
    内容长度:44
    内容类型:application / x-www-form-urlencoded
  • 上传完全发送出去:44个字节(共44个字节)
  • 将 bundle 软件标记为不支持多用途
    HTTP / 1.1 415不支持的媒体类型
    <连接:保持 Activity 状态
    连接:保持 Activity 状态
    X-Powered-By:Web服务器
    <服务器:Web服务器
    服务器:Web服务器
    <内容长度:0
    内容长度:0
    <日期:2020年11月8日,星期日,格林尼治标准时间
    日期:2020年11月8日,星期日,格林尼治标准时间
  • 最佳答案

    您将 header 设置为全部错误,CURLOPT_HTTPHEADER的 header 列表不是char *,而是一种特殊的列表,请尝试

    struct curl_slist *list = NULL;
    list = curl_slist_append(list, "Accept-Language: en-US,en;q=0.9");
    list = curl_slist_append(list, "Content-Type: application/json");
    list = curl_slist_append(list, "Accept: application/json, text/plain, */*");
    list = curl_slist_append(list, "Referer: https://zone1:50000/login");
    list = curl_slist_append(list, "Connection: keep-alive");
    curl_easy_setopt(curl, CURLOPT_HEADER, list);
    (...)
    curl_slist_free_all(list);
    (...)
    也不要使用CURLOPT_HEADER设置 User-Agent,因为如果将来您执行多个请求,或者如果您使用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, like Gecko) Chrome/75.0.3770.100 Safari/537.36");

    关于c++ - Libcurl得到响应 “415 Unsupported Media Type”但使用Curl.exe可以很好地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64735639/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com