从Java应用程序提交ASP表单

时间:2012-04-10 11:17:25

标签: java javascript asp.net

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

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

我尝试了两种方法:

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

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

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

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

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

    3. 将网址嵌入我的登录界面(我们将不胜感激。)

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

      如果有任何需要澄清,请告诉我。欢迎任何帮助。

3 个答案:

答案 0 :(得分:0)

尝试htmlunit,虽然它是专为测试而设计的,但对此非常理想。您可以将它与Selenium webdriver一起使用

答案 1 :(得分:0)

为什么不在IFrame中打开你的ASP表单,使用javascript填充所有字段&然后张贴。

这可以解决您的问题。

答案 2 :(得分: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();

就是这样..你得到了回复页面并在字段上发送了信息..你现在可以解析页面并获得网站回复..