JMeter代理和HTTP / POST中的Java序列化?


问题内容

我们有一个applet-servlet通信,我们想用JMeter的HTTP代理记录下来。它与GET消息一起使用,直到applet发送HTTP
POST消息,其中包括一些序列化的Java对象(内置类型),然后我们在applet中收到此错误:

替代文字http://img339.imageshack.us/img339/9238/appletservletjmeterhttp.png

好的,因此队列中某处存在一些JVM版本冲突。但是哪里?

在没有JMeter的情况下,通信可以正常运行,即:Applet-> Tomcat-> Servlet。全部在我的本地计算机上。

但这在JMeter中不起作用:Applet-> JMeter代理-> Tomcat-> Servlet。也都在我的机器上。

好像JMeter正在修改POST消息的内容…

我也使用Apache代理对其进行了测试,效果很好。

更有趣的是,我只安装了一个Java版本,一个JDK和一个JRE。两者1.6.0_07 …

我以为在开始深入兔子洞之前会问过;;)

这是直接发送到Tomcat的POST数据的十六进制转储:

00000348  ac ed 00 05 73 72 00 11  6a 61 76 61 2e 6c 61 6e ....sr.. java.lan
00000358  67 2e 49 6e 74 65 67 65  72 12 e2 a0 a4 f7 81 87 g.Intege r.......
00000368  38 02 00 01 49 00 05 76  61 6c 75 65 78 72 00 10 8...I..v aluexr..
00000378  6a 61 76 61 2e 6c 61 6e  67 2e 4e 75 6d 62 65 72 java.lan g.Number
00000388  86 ac 95 1d 0b 94 e0 8b  02 00 00 78 70 00 00 01 ........ ...xp...
00000398  7b                                               {

这是通过JMeter发送时的数据:

00000128  ac ed 00 05 73 72 00 11  6a 61 76 61 2e 6c 61 6e ....sr.. java.lan
00000138  67 2e 49 6e 74 65 67 65  72 12 e2 a0 a4 f7 3f 3f g.Intege r.....??
00000148  38 02 00 01 49 00 05 76  61 6c 75 65 78 72 00 10 8...I..v aluexr..
00000158  6a 61 76 61 2e 6c 61 6e  67 2e 4e 75 6d 62 65 72 java.lan g.Number
00000168  3f ac 3f 1d 0b 3f e0 3f  02 00 00 78 70 00 00 01 ?.?..?.? ...xp...
00000178  7b                                               {

第二个转储中有很多“ 3f” …因此,这肯定是某种编码问题。在标题中正确设置了内容类型:

POST /ABCOrder/ABCServlet?cmd=getNetworkConnection HTTP/1.1
Connection: keep-alive
Content-Type: application/octet-stream
Host: 109.107.148.164:8443
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
User-Agent: Mozilla/4.0 (Windows Vista 6.0) Java/1.6.0_14
Content-Length: 81

问题答案:

解决方法如下:JMeter有一个配置文件 bin / jmeter.properties 。在这里,您可以找到一个可以设置二进制内容类型的选项:

# Binary content-type handling
# These content-types will be handled by saving the request in a file:
proxy.binary.types=application/x-amf,application/x-java-serialized-object

现在,我不知道为什么默认情况下不包括 application / octet-stream ,但是您只需将其添加到列表中就可以了。

proxy.binary.types=application/x-amf,application/x-java-serialized-object,application/octet-stream

这是我发现的方式:https :
//issues.apache.org/bugzilla/show_bug.cgi?id=44808

在JMeter上搜索了 已关闭的 bug … :-)