如何让一个基于java的应用程序服务器回复一个空值的响应头,如下所示?
content-length:rn
不幸的是,当我打电话给时
response.setHeader("Content-Length", len)
如果len是空字符串或null,则响应将不包括标头。
我已经检查了HttpServletResponse和HttpServletResponseWrapper javadocs,但不知道什么可以被覆盖以提供我的自定义行为。
背景
我正在构建一个测试应用程序,该应用程序应该模拟行为不端的HTTP服务器场景。应用程序应该用预设的页面和HTTP标头来回复请求,包括像上面这种格式错误的页面和标头。该应用程序是用grails编写的。
我正在构建一个测试应用程序,该应用程序应该模拟行为不端的HTTP服务器场景。
在这种情况下,试图让一个性能良好的服务器模仿这种行为是个坏主意。如果您需要模拟一个坏服务器,或者您希望测试的一组特定场景,那么您可以执行以下操作之一:
- 编写一个自定义应用程序,该应用程序在特定端口上侦听(使用ServerSocket类),该端口将以格式错误的HTTP标头进行响应。使用HTTP库可能没有帮助,因为库可能有检测错误条件并自动更正的代码
- 使用能够拦截响应并允许修改这些响应的HTTP代理。如果你在谷歌上搜索"http调试代理",你会发现一些,但如果你还没有听说过,我建议你看看Fiddler、WebScarab或Burp
您可以尝试使用SoapUI或Fiddler这样的Firefox扩展工具。我没有试过用他们设置一个错误的标题,但如果你可以的话,我不会感到惊讶。
我不清楚:您的应用程序是用Grails编写的,但您正在讨论javadocs。。。好吧,我想你试图用JAVA创建一个坏服务器。。。
正如您所说,用"Content-Length:\r\n"回答HTTP是不合法的。您必须放入一个整数值或放弃标头。我认为setHeader()可以帮助您避免生成非法的HTTP消息。
您可以通过这种方式来解决手动创建头的问题(您可以在不使用setHeader块的情况下直接写入套接字)。
另一种解决方案是使用自己的HttpServlet响应实现创建一个过滤器(除了servlet之外)。您将把这个实现传递给servlet。