我们有一个applet-servlet 通信,我们想用JMeter 的HTTP 代理记录它。它与 GET 消息一起工作,直到 applet 发送包含一些序列化 Java 对象(内置类型)的 HTTP POST 消息,然后我们在 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