httpclient模拟登录post请求,总是返回400

JJC001 2019-01-28 11:48:38






代码:


private static final String url = "https://mall.shopee.com.my/api/v0/buyer/login/login_post/";
private static final String login_key = "NSQK.my";
private static final String login_type = "username";
private static final String password_hash = "9bfd6c1a1fa86b5d514d54486609da45e1885bb7810a8c350db72dbabf31d091";
private static final String captcha = "";
private static final String remember_me = "false";

public static CloseableHttpClient createSSLClientDefault(){
try {
SSLContext sslContext=new SSLContextBuilder().loadTrustMaterial(
null,new TrustStrategy() {
//信任所有
public boolean isTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
return true;
}
}).build();
SSLConnectionSocketFactory sslsf=new SSLConnectionSocketFactory(sslContext);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
return HttpClients.createDefault();
}

private static final String SOURCES =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";

private static String randomStr() {
char[] text = new char[32];
for (int i = 0; i < 32; i++) {
text[i] = SOURCES.charAt(new Random().nextInt(SOURCES.length()));
}
return new String(text);
}


public static void main(String[] args) throws IOException {
CloseableHttpClient httpClient =createSSLClientDefault();
String csrftoken = randomStr();
HttpPost httppost2=new HttpPost(url);
httppost2.setHeader("referer","https://mall.shopee.com.my/");
httppost2.setHeader("x-csrftoken",csrftoken);
httppost2.setHeader("accept", "*/*");
httppost2.setHeader("accept-language", "zh-CN,zh;q=0.9,en;q=0.8");
httppost2.setHeader("content-type", "application/json");
httppost2.setHeader("origin", "https://mall.shopee.com.my");
httppost2.setHeader("user-agent", "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36");
httppost2.setHeader("x-api-source","pc");
httppost2.setHeader("x-requested-with","XMLHttpRequest");
httppost2.setHeader("Cookie","csrftoken="+csrftoken+"; REC_T_ID=fe753e26-2067-11e9-b249-5254000e999f; SPC_IA=-1; SPC_T_ID=\"RBKm/EFTD2X/6DounNIM1+eP/uhwOOKYJLIxwVUo4aUouVzZvhIBML/1DCpBVgA6LC4gmxlqcuZb0aoa1xfPBl6gnWa07RVjVYQELW9JfaA=\"; SPC_T_IV=\"NgBL1RygMKg5IpHWqBCGVg==\"");
JSONObject param = new JSONObject();
param.put("login_key",login_key);
param.put("login_type",login_type);
param.put("password_hash",password_hash);
param.put("captcha","");
param.put("remember_me",false);
StringEntity entity1 = new StringEntity(param.toString(),"utf-8");
httppost2.setEntity(entity1);
CloseableHttpResponse response=httpClient.execute(httppost2);
HttpEntity entity =response.getEntity();
String html=EntityUtils.toString(entity);
System.out.println(html);
//关闭连接
response.close();
httpClient.close();
}

不带cookie返回403没有权限,带上cookie不管带不带参数请求都是返回400。麻烦各位大佬给看看,谢谢。
...全文
1220 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
JJC001 2019-05-07
  • 打赏
  • 举报
回复
引用 14 楼 WANGLUOXIAOZI 的回复:
老大,下载虾皮关注的设置cookie是如何设置,是否可以指点指点呢
你加我微信吧,jjc931239256
WANGLUOXIAOZI 2019-05-05
  • 打赏
  • 举报
回复
老大,下载虾皮关注的设置cookie是如何设置,是否可以指点指点呢
JJC001 2019-01-30
  • 打赏
  • 举报
回复
引用 11 楼 oldmee 的回复:
代码中请求的类型是json格式 httppost2.setHeader("content-type", "application/json");

StringEntity entity1 = new StringEntity(param.toString(),"utf-8");

// 加下面这句代码试试
entity1.setContentType("application/json");

httppost2.setEntity(entity1);
这位大哥你好,还是不行。
oldmee 2019-01-29
  • 打赏
  • 举报
回复
在网页里调试,请求当然是multipart/form-data格式
oldmee 2019-01-29
  • 打赏
  • 举报
回复
代码中请求的类型是json格式 httppost2.setHeader("content-type", "application/json"); StringEntity entity1 = new StringEntity(param.toString(),"utf-8"); // 加下面这句代码试试 entity1.setContentType("application/json"); httppost2.setEntity(entity1);
podd 2019-01-29
  • 打赏
  • 举报
回复
引用 9 楼 JJC001 的回复:
引用 6 楼 www.alphaos.club 的回复:
我知道这是form-data格式,可是代码里调不通啊。。
httppost2.setHeader("content-type", "application/json"); 换成网站上的
JJC001 2019-01-29
  • 打赏
  • 举报
回复
引用 6 楼 www.alphaos.club 的回复:
我知道这是form-data格式,可是代码里调不通啊。。
JJC001 2019-01-29
  • 打赏
  • 举报
回复
引用 1 楼 亲爱的Joe 的回复:
截图命名返回200是成功啊
图是截的shoppe网站,当然是好的。看清楚问题,我用httpclient模拟就返回400
JJC001 2019-01-28
  • 打赏
  • 举报
回复
麻烦指出我代码哪里错了,请求的参数我也都给出来了,能google的我都google了,谢谢。
podd 2019-01-28
  • 打赏
  • 举报
回复
在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里; 原因:1)前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装; 2)前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型; 解决方案: 1)对照字段名称,类型保证一致性 2)使用stringify将前端传递的对象转化为字符串 data: JSON.stringify(param) ;
亲爱的Joe 2019-01-28
  • 打赏
  • 举报
回复
截图命名返回200是成功啊
podd 2019-01-28
  • 打赏
  • 举报
回复
JJC001 2019-01-28
  • 打赏
  • 举报
回复
补充一句,我用POSTMAN是可以正常请求的。
podd 2019-01-28
  • 打赏
  • 举报
回复
或者后台接收model时类型问题
podd 2019-01-28
  • 打赏
  • 举报
回复
content-type 或 后台get post限制

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧