【发布时间】:2019-06-07 06:19:54
【问题描述】:
我正在尝试登录门户。它使用邮递员工作。当我使用纯 Java 或 OkHttp 尝试相同的请求时,登录失败,我将被重定向到登录页面。
HttpUrl.Builder httpBuilder = HttpUrl.parse("https://test58.cashctrl.com/auth/login.html").newBuilder();
httpBuilder.addQueryParameter("JMCF_AUTH_EMAIL", "email");
httpBuilder.addQueryParameter("JMCF_AUTH_PASSWORD", "password");
Request request = new Request.Builder()
.url(httpBuilder.build())
.get()
.build();
我知道 URL 看起来很奇怪,但它使用 Postman 或什至只是使用浏览器以这种方式工作。
我尝试过的纯 Java 替代方案:
Map<String, String> parameters = new HashMap<>();
parameters.put(PARAM_EMAIL, EMAIL);
parameters.put(PARAM_PASSWORD, PASSWORD);
URL url = new URL(LOGIN_URL + "?" + ParameterStringBuilder.getParamsString(parameters));
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("POST");
con.setInstanceFollowRedirects(true);
con.setDoOutput(true);
DataOutputStream out = new DataOutputStream(con.getOutputStream());
out.writeBytes(ParameterStringBuilder.getParamsString(parameters));
out.flush();
out.close();
int status = con.getResponseCode();
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine + "\n");
}
in.close();
con.disconnect();
System.out.println(status);
System.out.println(content.toString());
邮递员一定是在做一些特别的事情,或者是我看不到的浏览器。
【问题讨论】:
-
请尝试将
Content-Type添加到HttpURLConnection con对象 -
这并没有什么不同
-
您可以发布任何日志吗?
-
第一个例子是 GET,第二个是 POST。邮递员在做什么?
-
在 Postman 中,Get 和 Post 工作。好吧,没有日志只是一个响应,在邮递员中我从门户网站获得响应,在 Java 中我再次获得登录页面。