我正在编写一个具有登录屏幕的Java应用程序。理想情况下,我想获取用户提供的数据(名称,密码),并将其提交到可以验证其凭据的ASP表单。我不拥有ASP表单,我只能访问URL。我也不希望用户直接将他们的凭证输入Web表单。他们会将自己的凭据输入我的程序,我的程序会将数据放入表单并提交,并根据响应允许/拒绝用户。
当然,ASP表单上的提交按钮是一个POST请求。但是,构建URL(... login?username = name& password = pass)不起作用,因为必须通过填写了文本框的按钮提交表单。
我尝试了两种方法:
使用Java的URLConnection类。这似乎不起作用,因为表单提交仅限于我上面提到的方法,即构建URL。
使用Javascript访问和编辑页面上的元素。这也没有用,因为Javascript是从我的程序运行的,它不是Web浏览器,因此无法访问常用的“文档”或“窗口”。
我能想到的其他潜在解决方案:
打开浏览器登录页面但不关注它,运行脚本填写并提交表单,解析响应,然后关闭浏览器。除了在Java程序中输入登录页面之外,这根本不涉及用户。
使用第三方Java库(建议?参考教程?)。
将网址嵌入我的登录界面(我们将不胜感激。)
无法更改的是我的程序是Java,并且登录URL是一个ASP表单,它隐藏了URL中的POST数据。
如果有任何需要澄清,请告诉我。欢迎任何帮助。
答案 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();
就是这样..你得到了回复页面并在字段上发送了信息..你现在可以解析页面并获得网站回复..