Jsoup默认发送请求时会将content-type设置成 application/x-www-form-urlencoded
这个时候如果想发送json的请求参数,即使你手动设置了content-type,jsoup也会替换成默认的,服务端将无法接受。
以下为jsoup设置head源码
// set up the request for execution
String mimeBoundary = null;
if (req.data().size() > 0 && (!methodHasBody || hasRequestBody)) s
erialiseRequestUrl(req);
else if (methodHasBody)
mimeBoundary = setOutputContentType(req);
private static String setOutputContentType(final Connection.Request req) {
String bound = null;
if (needsMultipart(req)) {
bound = DataUtil.mimeBoundary();
req.header(CONTENT_TYPE, MULTIPART_FORM_DATA + "; boundary=" + bound);
} else {
req.header(CONTENT_TYPE, FORM_URL_ENCODED + "; charset=" + req.postDataCharset());
}
return bound;
}
根据源码我们发现jsoup会判断data有没数据,如果没数据就会设置默认的content-type。
那么解决方法就很简单了,我们设置一个任意的data数据即可
Connection connection = Jsoup.connect(url);
connection.data("aaa","ccc"); //这是重点
connection.header("Content-Type", "application/json; charset=UTF-8"); //这是重点
connection.header("Accept", "text/plain, */*; q=0.01");
connection.timeout(15000);
String body = "{\"CategoryType\":\"SiteHome\",\"ParentCategoryId\":0,\"CategoryId\":808,\"PageIndex\":2,\"TotalPostCount\":4000,\"ItemListActionName\":\"PostList\"}";
connection.requestBody(body);
Document document = connection.post();
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于