【问题标题】:Wait for redirect, read form then post等待重定向,阅读表格然后发布
【发布时间】:2016-02-12 10:54:16
【问题描述】:

我制作了一个应用程序,它基本上只是发布一个登录表单,然后使用 API 获取数据。现在它的网站改变了它的工作方式,这样当你加载登录页面时,它会将你重定向到一个在查询字符串中带有随机字符串而在表单操作中带有不同随机字符串的页面。

由于我不能再向提交页面发出 HTTPS POST 请求,我需要一种加载登录页面的方法,等待重定向,然后再次等待加载,然后将表单操作用作 HTTPS POST URL。

如何加载页面,具体是等待它重定向然后完成加载?

我现在使用的差不多是这样的:

        HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection();
        urlConnection.setRequestMethod("POST");
        urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
        urlConnection.setRequestProperty("User-Agent", USER_AGENT);
        urlConnection.setConnectTimeout(5000);

        String urlParameters = "ctl00$ContentPlaceHolder1$UsernameTextBox="+ URLEncoder.encode(inumber, "UTF-8") + "&ctl00$ContentPlaceHolder1$PasswordTextBox="+ URLEncoder.encode(password, "UTF-8");

        urlConnection.setRequestProperty("Content-Length", "" +
                Integer.toString(urlParameters.getBytes().length));

        urlConnection.setUseCaches(false);
        urlConnection.setDoInput(true);
        urlConnection.setDoOutput(true);
        urlConnection.setChunkedStreamingMode(0);

        DataOutputStream out = new DataOutputStream(urlConnection.getOutputStream());
        out.writeBytes(urlParameters);
        out.flush();
        out.close();

【问题讨论】:

  • 是在来自 POST 的响应中使用 HTML/JavaScript 完成的重定向还是 HTTP 30X 重定向?
  • 这可以在 Firefox 开发者工具或 Chrome Inspector 的网络标签等工具中确定。
  • 加载时返回 302 和位置。据我所知,他们使用的几乎是this问题的标题

标签: java android redirect https request


【解决方案1】:

你有几个选择:

  1. 使用HTTPURLConnection#setInstanceFollowRedirects(boolean) 并确保您使用与重定向相同的协议请求初始页面(否则不会遵循)
  2. 使用支持任意重定向的[Google HTTP Client]

【讨论】:

  • 谢谢,我会研究第一个,看看我在哪里,如果这不起作用,我会尝试第二个选项
猜你喜欢
  • 1970-01-01
  • 2022-07-11
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
相关资源
最近更新 更多