【问题标题】:Submitting ASP form from Java application从 Java 应用程序提交 ASP 表单
【发布时间】:2012-04-10 11:17:25
【问题描述】:

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

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

我尝试了两种方法:

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

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

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

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

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

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

不能改变的是我的程序是用 Java 编写的,并且登录 URL 是一个 ASP 表单,它隐藏了 URL 中的 POST 数据。

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

【问题讨论】:

  • ...login?username=name&password=pass - 你不应该这样做,因为任何拦截该呼叫或有权访问网络服务器日志文件的人都可以看到密码。
  • @Thomas 是的,我同意,我只是想看看有什么效果。如果可以直接从我的程序中填写并提交表单会更好,因为网络表单是安全的。
  • AFAIK 您应该能够使用URLConnection 提交 POST 请求,只需将参数放入请求正文而不是 URL(为连接创建写入器并将参数写入其中)。
  • @Thomas 谢谢——我如何将参数放入请求正文而不是 URL?我有一个用于连接的 OutputStreamWriter。目前我将用户名和密码写入连接,但它似乎没有提交任何内容。

标签: java javascript asp.net


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 谢谢——我在这里面临的问题是我的 JS 是通过我的程序运行的,并且与 Web 浏览器无关。这意味着当我调用 document.createElement("iframe");或类似的东西,我收到错误:ReferenceError: "document" is not defined.
    • 你不能把它添加到你页面的客户端吗?
    • 我不拥有该页面,也无法向其添加任何代码。这是我学校的安全登录,我的程序的通用用户是学校的员工,并且拥有使用学校登录的凭据。我不想让他们处理另一组凭据,而是让他们使用他们已经拥有的凭据。我希望我的 JS 能够访问该页面上的内容,而无需将代码本身嵌入页面中。我不确定这是否可能。
    • 基本上,我希望能够做类似 var form = [site].getElement("form") 之类的事情,通常可以说 document.getElement("form") .
    【解决方案3】:

    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();
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 2021-12-22
      • 2019-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多