【问题标题】:Submit a web form in android programatically以编程方式在 android 中提交 Web 表单
【发布时间】:2016-03-01 02:32:18
【问题描述】:

我正在尝试登录网站并在 android 中以编程方式加载网页。意思是,我有密码和登录名,需要提交一个网络表单并获取响应页面。我在这里尝试了代码:Doing HTTP Post with Android 但我想我可能做错了。

如果这是我要访问的网站:http://goo.gl/eiBhP 我的代码是

HttpClient httpclient =  new DefaultHttpClient(httpParameters);
HttpPost httppost = new HttpPost(Constants.MAIN_URL);
List<namevaluepair> nameValuePairs = new ArrayList<namevaluepair>(2);
nameValuePairs.add(new BasicNameValuePair("username", "correctusername"));
nameValuePairs.add(new BasicNameValuePair("password", "correctpassword"));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse response = httpClient.execute(httpost);

那我应该可以用了

BufferedReader br = new BufferedReader(new InputStreamReader(
    entity.getContent()), 8096);

获得响应。登录的 id 和在站点上传递的用户名和密码。我还应该以某种方式将按钮作为名称值对提交吗?我似乎无法让它工作,它只是返回登录页面。请帮忙。我已尝试阅读其他类似问题,但似乎无法正常工作。

【问题讨论】:

  • 首先使用一些像 fiddler2 这样的 http 嗅探器来查看如果您从 Web 浏览器登录时 Web 浏览器正在发送什么……然后从 android 发送相同的信息……这并不容易,因为网站可以使用某种视图状态
  • 为什么投反对票?这是一个合法的问题,OP已经尝试了一些东西。我的建议是再次查看网页源 - 您会注意到它还有其他输入字段被键入为隐藏。当您提交网页时,所有输入字段(可见或其他)都包括在内 - 您可能必须这样做。
  • 密码呢?我不认为浏览器发送正确的密码?它应该向服务器发送一个散列密码。也检查一下。
  • @adelphus 那么我将如何提交隐藏按钮?价值是多少?我可以将它添加到名称值对列表中吗?
  • 另外@OlgunKaya 不会在帖子提交和网站之间进行散列,否则我怎么能简单地模拟输入表单数据并推送提交?

标签: android http post webforms


【解决方案1】:

基本上,您需要确保您的代码提交的信息完全与网页相同。 正如 Selvin 指出的那样,网站很有可能使用某种形式的跟踪——无论是隐藏的输入值、cookie 还是其他一些基于状态的数据。

您需要查看登录网页的来源,并了解提交登录详细信息时它在做什么——您不一定需要知道所有值的含义,但您的代码必须提交相同的 POST 数据。

如果网站使用状态信息,您将无法在代码中硬编码这些输入值。您可能需要每次使用 HTTP GET 请求检索登录网页的新实例,然后解析数据以提取相关状态数据。不要忘记他们也可能使用您可能需要提交的 cookie。

总而言之,您可能需要做更多的工作才能使其进入工作状态。不是想劝阻你(我不知道你想达到什么目的),但也许只是使用网站更容易!

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 2010-10-16
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-06
    • 2020-10-03
    相关资源
    最近更新 更多