1

如何使用空值响应标头进行基于 java 的应用程序服务器回复,像这样?

content-length:\r\n

不幸的是,当我打电话时

response.setHeader("Content-Length", len)

其中 len 是空字符串或 null,响应将不包括标头。

我检查了 HttpServletResponse 和 HttpServletResponseWrapper javadocs,但无法弄清楚可以覆盖什么来提供我的自定义行为。

背景

我正在构建一个测试应用程序,它应该模拟行为不佳的 HTTP 服务器场景。该应用程序应该回复带有预设页面和 HTTP 标头的请求,包括上述情况的格式错误的请求。该应用程序是用 grails 编写的。

4

3 回答 3

1

您可以尝试使用SoapUIFiddler之类的工具及其 Firefox 扩展。我没有尝试与他们一起设置格式错误的标题,但如果可以的话,我不会感到惊讶。

于 2011-06-24T15:16:08.780 回答
1

我正在构建一个测试应用程序,它应该模拟行为不佳的 HTTP 服务器场景。

在这种情况下,试图让表现良好的服务器模仿这种行为是一个坏主意。如果您需要模拟一个坏的服务器,或者您希望测试的一组特定场景,那么您可以执行以下操作之一:

  • 编写一个自定义应用程序,该应用程序侦听特定端口(使用 ServerSocket 类),该端口将使用格式错误的 HTTP 标头进行响应。使用 HTTP 库可能无济于事,因为库可能有代码来检测错误条件并自动纠正它们。
  • 使用能够拦截响应并允许修改这些响应的 HTTP 代理。如果你用谷歌搜索“http 调试代理”,你会找到几个,但如果你还没有听说过,我建议你看看FiddlerWebScarabBurp
于 2011-06-24T15:24:25.183 回答
0

我不清楚:您的应用程序是用 Grails 编写的,但您正在讨论 javadocs...好吧,我想您尝试在 JAVA 中创建一个坏服务器...

正如您所说,使用“Content-Length:\r\n”回答对于 HTTP 是不合法的。您必须输入一个整数值或丢弃标头。我认为 setHeader() 可以帮助您避免产生非法的 HTTP 消息。

您可以通过这种方式手动创建标头(您可以直接写入套接字而不使用 setHeader 块)。

其他解决方案是使用您自己的 HttpServletResponse 实现创建一个过滤器(除了您的 servlet)。您将把这个实现传递给 servlet。

于 2011-06-24T15:16:25.343 回答