【问题标题】:How to programmatically send a HTTP request with parameters? [duplicate]如何以编程方式发送带参数的 HTTP 请求? [复制]
【发布时间】:2011-08-21 09:38:25
【问题描述】:

如果我使用浏览器向服务器发送信息(例如使用登录、密码页面),我只需填写用户文本框和密码文本框并单击登录按钮。

我想发送此信息,但不必使用浏览器。我想 'fill' 文本框,但不必在浏览器中手动完成。可能正在使用 Servlet。

我的问题是:如何在文本框中发送信息,例如,从 Servlet 发送到网站?

【问题讨论】:

标签: java http servlets


【解决方案1】:

为什么不使用http://your.domain.name/your/servlet/path?userFieldName=THE_VALUE_YOU_WANT_TO_PASS&passwdFieldName=PASSWORD之类的URL从Java调用URL

servlet 会感觉值来自这些盒子。

或者您可能想深入了解Apache HTTP Client 以模仿从客户端发送的请求。

呃..哦..你在做功能测试吗?为什么不看看JMeter


根据评论更新

你需要知道what actually form submission does?它基本上形成了一个由键值(KV)对组成的查询字符串。

因此,如果您有一个名为tfield 的文本字段,其中用户输入了some text,并且有一个名为ddfield 的下拉菜单,其中用户选择了optionX,其值为optionX-Val。这个表单被提交到一个 URL,http://my.domain.name/my/servlet——浏览器会发送一个看起来像

的请求
http://my.domain.name/my/servlet?tfield=some%20text&ddfield=optionX-Val

如果您想模拟表单提交,您将不得不手动创建一个 URL,该 URL 包含一个请求字符串,其中包含所有字段及其值,如 FIELD_NAME=FIELDVALUE 有序对,由 & 分隔


啊,好主意。如果您使用 Firebug(Firefox 扩展),请在 Firebug 中打开 NET 面板,手动提交您想要模仿的表单。查看提交表单时发布的请求。它将具有您所追求的确切 URL 格式。复制此 URL,替换值并根据需要进行虚假提交。

希望这会有所帮助。

【讨论】:

  • 好的,如果我有文本框,那么列表框呢?它的工作原理是一样的吗?还是有区别?
  • @pictureyournews 更新了答案。
  • 这是一个很好的答案。
【解决方案2】:

servlet 负责另一端:它基本上是一个处理位于 servlet 容器内的 http 请求的处理程序。如果我理解正确,您想发送一个 http 请求。你可以使用像curl 这样的命令行工具来做到这一点,或者如果你想留在java领域,你可以试试this example on exampledepot。使用您喜欢的搜索引擎搜索更多示例,例如使用诸如“通过 url 发送 GET 请求”之类的搜索词。

在您需要发送用户名和密码信息的情况下,您需要查看 html 并找到 form 元素的 action 属性的 url。然后您需要找到用户名和密码字段的名称。使用这些名称作为 url 参数,您可以构造一个模仿发送表单的 GET 请求。

注意:通常将密码以纯文本形式存储在代码中和/或以纯文本形式将其发送到网站并不是一件好事。

【讨论】:

    【解决方案3】:

    我不清楚你到底在做什么。我假设 servlet 将发送数据。这里有一些例子。

    使用 setAttribute 然后转发请求

    //On your servlet
    request.setAttibute('user', 'admin');
    request.setAttribute('password', '123');
    getServletContext().getRequestDispatcher("page.jsp").forward(request, response);
    
    //On your jsp page get the value using EL
    <span>${user}</span>
    

    使用会话

     //On your servlet
    HttpSession session = request.getSession(true);
    session.setAttribute('user', 'admin');
    session.setAttribute('password', '123');
    getServletContext().getRequestDispatcher("page.jsp").forward(request, response);
    
    //On your jsp page get the value using EL
    <span>${user}</span>    
    

    上面的示例旨在在 Web 应用程序中工作。将信息发送到另一个期望请求的 Web 应用程序。请参阅下面的示例。

    //On your jsp or servlet, you can also do the same within web application
    request.sendRedirect('http://example.com?user=admin&password=123');
    
    //on your jsp @example.com
    <span>${param.user}</span>
    

    如果这不是您的意思,添加更多详细信息会有所帮助。

    【讨论】:

      【解决方案4】:

      以防万一有人感兴趣,Firefox 有一个名为 Tamper data 的插件。有了它,您可以停止发送 http 请求并对其进行修改。它将向您显示发送参数所需的“url”、它们当前拥有的值以及它们的名称。您可以查看here。之后你可以使用request.sendRedirect('url you got from Tamper Data');

      【讨论】:

        猜你喜欢
        • 2016-03-23
        • 1970-01-01
        • 2012-12-29
        • 2016-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-14
        相关资源
        最近更新 更多