Bug 60649

Summary: HTTP(S) Test Script Recorder: wrong postdata
Product: JMeter - Now in Github Reporter: Biagio <bdn02>
Component: HTTPAssignee: JMeter issues mailing list <issues>
Status: NEW ---    
Severity: normal CC: kungu, p.mouawad
Priority: P2 Keywords: PatchAvailable
Version: 3.1   
Target Milestone: ---   
Hardware: PC   
OS: All   
Attachments: Try to guess if body data is of name=value form

Description Biagio 2017-01-26 14:10:18 UTC
I'm using jmeter to record an internal web application, in my application are maked some httprequest by Javascript code that pass as postdata a simple key:

<POSTDATA>
KEY

If i call my web application without recording all works fine, if i call my application while jmeter is record the application don't work.
The problem is that jmeter recording module modify the post data adding the "=" character to request
<POSTDATA>
KEY=

Thanks
Comment 1 Felix Schumacher 2017-01-26 15:00:39 UTC
Created attachment 34680 [details]
Try to guess if body data is of name=value form

If no content-type is given for a post body, or it is the default one, DefaultSamplerCreater will assume it is of the form name=value. This patch looks for an equals sign in the body and if it finds none, it will assume, that the body is not of the name=value form.
Comment 2 Philippe Mouawad 2017-01-26 15:05:40 UTC
(In reply to Felix Schumacher from comment #1)
> Created attachment 34680 [details]
> Try to guess if body data is of name=value form
> 
> If no content-type is given for a post body, or it is the default one,
> DefaultSamplerCreater will assume it is of the form name=value. This patch
> looks for an equals sign in the body and if it finds none, it will assume,
> that the body is not of the name=value form.

Hi Felix.
What if content is json ?
It will contain '=' , will it work ? 
AFAIK, recorder handles correctly json no ?

@Biagio, could you provide the exact post body ?
Thanks
Comment 3 Felix Schumacher 2017-01-26 19:41:00 UTC
The patch will only work for the simplest case. It might even not work for base64 coded data.

But the problem only arises, when no or the default content-type is used. My hope is, that clients sending JSON will use the correct content-type.

Another possible solution would be to check whether the body data starts with a regex like "(?i)[a-z0-9_.-]{30}=.", assuming that keys are not too long and consists of only 'simple' characters.

But that seems even less fool- or fail-proof.
Comment 4 Pierre 2020-11-14 21:53:11 UTC
I am getting the same behavior on my tests because the content-type is not correctly set on the app i'm testing...

What do you think if the behavior of DefaultSamplerCreater is changed like this:
1. Tries to parse data and splits name and value (I assume it's the current way of working)
2. If 'name' is not null AND 'value' is null, then consider that the format is just raw data, not name=value

From a quick look, if it really was a name=value format but with an empty value, the data will still be sent to the server like received while recording, with no modifications, so it'll be fine.

Let me know your thoughts!
Comment 5 The ASF infrastructure team 2022-09-24 20:38:07 UTC
This issue has been migrated to GitHub: https://github.com/apache/jmeter/issues/4248