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