我不确定我做错了什么,但当使用curl中的命令时,不会发生错误。keep change my type tocontent-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\"}"
我收到的答复是:
>
找到主机区域1的包:0x11CE588[串行]
不能复用,即使我们想!
重新使用现有连接!具有主机区域1的(#0)
已连接到zone1(10.1.233.120)端口50000(#0)*>POST/USER/LOGIN HTTP/1.1主机:zone1:50000 Accept:/Accept-Encoding:Accept-Encoding:gzip,deflate,br content-length:44 content-type:application/x-www-form-urlencoded
将包标记为不支持多用途
您设置的头都是错误的,CURLOPT_HTTPHEADER的头列表不是一个字符*,它是一种特殊的列表,请尝试
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");
componentDidMount(){
问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道
我已经创建了一个示例web服务来进行post调用。 我使用的是Jersey JAX-RS和Maven。
我必须做的是,我必须在给定的URL中发布JSON数据,其中JSON看起来像 和我的功能 当我张贴它的时候;我得到一个错误 “远程服务器返回错误:(415)不支持的媒体类型。” 有人知道吗;我错在哪里?
这以前适用于.NET 4.6上的ASP.NET MVC 5。
问题内容: 我正在尝试使用jQuery 1.6(Jackson 2.1.1 和Spring 3.2.0 )通过JSON通过该方法向数据库中插入和/或更新数据。 JS代码如下。 通过URL映射的Spring控制器内部的方法如下。 服务器按照问题的含义进行响应, 415不支持的媒体类型 标头信息如下所示。 整个文件如下。 当我删除一个方法参数并仅用于接受请求参数时,它可以工作。 问题答案: 浏览器发送