1

我正在编写一个具有登录屏幕的 Java 应用程序。理想情况下,我想获取用户提供的数据(姓名、密码),并将其提交到可以验证其凭据的 ASP 表单。我没有自己的 ASP 表单,我只能访问 URL。我也不希望用户直接在 Web 表单中输入他们的凭据。他们会将他们的凭据输入我的程序,我的程序会将数据放入表单并提交,并根据响应允许/拒绝用户。

当然,ASP 表单上的提交按钮是一个 POST 请求。但是,构建 URL (...login?username=name&password=pass) 不起作用,因为必须通过填写了文本框的按钮提交表单。

我尝试了两种方法:

  1. 使用 Java 的 URLConnection 类。这似乎不起作用,因为表单提交仅限于我上面提到的方法,即构造 URL。

  2. 使用 Javascript 访问和编辑页面上的元素。这也不起作用,因为 Javascript 是从我的程序运行的,该程序不是 Web 浏览器,因此无法访问常用的“文档”或“窗口”。

我能想到的其他潜在解决方案:

  1. 打开浏览器到登录页面,但不给它焦点,运行脚本来填写和提交表单,解析响应,然后关闭浏览器。除了在我的 Java 程序中输入登录页面外,这根本不会涉及用户。

  2. 使用第 3 方 Java 库(建议?参考教程?)。

  3. 将 URL 嵌入我的登录屏幕(在这方面的任何帮助将不胜感激)。

无法更改的事情是我的程序是用 Java 编写的,并且登录 URL 是一个 ASP 表单,它隐藏了 URL 中的 POST 数据。

让我知道是否有任何需要澄清的地方。欢迎任何帮助。

4

3 回答 3

0

尝试 htmlunit,虽然它是为测试而设计的,但它非常适合。您可以将它与 Selenium webdriver 结合使用

于 2012-04-10T11:27:02.777 回答
0

为什么不使用 javascript 在 IFrame 中打开 ASP 表单填充所有字段然后发布它。

这应该可以解决您的问题。

于 2012-04-10T11:49:24.050 回答
0

Sfk 是正确的,我遇到了类似的问题并设法填写表格并使用Htmlunit提交。@sfk 非常感谢,你让我走上了正确的道路。

所以用 htmlunit

 //for chrome simulation
 WebClient webClient = new WebClient(BrowserVersion.CHROME_16);
 //has getting an error from [http://www.google-analytics.com/ga.js with javascript on.
 webClient.setJavaScriptEnabled(false);

 HtmlPage page = webClient.getPage("http://yourtargetpage/Default.aspx");

//get the form by name, check page source for name
 HtmlForm form = page.getFormByName("aspnetForm");
 HtmlPasswordInput inputPass =  form.getInputByName("your input password text field name");    
 HtmlTextInput userName =  form.getInputByName("your input user text field name");

 HtmlSubmitInput button=form.getInputByName("your target submit button");

 //set username and password
  userName.setText("myuser");
  inputPass.setText("mypassword");
//click the submit button and get the returned page
  HtmlPage page2 = button.click();

就是这样..您获得了回复页面并在字段上发送了信息..您现在可以解析页面并获取站点响应..

于 2012-12-26T02:50:23.870 回答