Hello,

when recording HTTP data with JMeter, I'd assume that the request is sent to 
the server just like the browser would send it.
This is not the case in two examples I've run across.

As you'll know, when recording with HTTP Proxy Server, JMeter will be creating 
HTTP Samplers and then using their sample method to realize the request, 
returning the return value to the browser.
So we need to create a HTTP Sampler which produces the same request as the 
browser would have.

When looking at HttpRequestHdrExt.populateSampler, I see that 
ConversionUtils,getEncodingFromContentType is called. In case the encoding is 
not supported (returns null) we look in the pageEncodings and formEncodings 
maps (when are they populated??) and if we find nothing here, we use:
postData = new String(rawPostData);
meaning we convert the bytes to a string based on the platform-specific default 
encoding.

In my examples this breaks the communication, so not only replay but record 
does not work.
In one case I have no Content-Type header in the request, and new 
String(rawPostData) seems to break it, in the other case, I have a 
Content-Type: application/soap+msbin1 header, where 
"getEncodingFromContentType" returns null.

We really should make sure JMeter sends exactly what it received to the server 
when acting as proxy, and even better would be if this would work when 
executing the test.
What do you think?

Regards,
Jens
                                          

Reply via email to