Skip to content

Commit f77906a

Browse files
Crydustrbri
authored andcommitted
Combine query with request body parameters
This way the return value of `org.htmlunit.WebRequest.getParameters` will better resemble that of a servlet api.
1 parent f6d37bf commit f77906a

File tree

2 files changed

+47
-2
lines changed

2 files changed

+47
-2
lines changed

src/main/java/org/htmlunit/WebRequest.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,7 +367,11 @@ public List<NameValuePair> getParameters() {
367367
return normalize(getRequestParameters());
368368
}
369369

370-
return normalize(HttpUtils.parseUrlQuery(getRequestBody(), getCharset()));
370+
// getRequestParameters and getRequestBody are mutually exclusive
371+
final List<NameValuePair> allParameters = new ArrayList<>();
372+
allParameters.addAll(HttpUtils.parseUrlQuery(getUrl().getQuery(), getCharset()));
373+
allParameters.addAll(HttpUtils.parseUrlQuery(getRequestBody(), getCharset()));
374+
return normalize(allParameters);
371375
}
372376

373377
if (getEncodingType() == FormEncodingType.TEXT_PLAIN && HttpMethod.POST == getHttpMethod()) {
@@ -379,7 +383,10 @@ public List<NameValuePair> getParameters() {
379383
}
380384

381385
if (FormEncodingType.MULTIPART == getEncodingType()) {
382-
return normalize(getRequestParameters());
386+
final List<NameValuePair> allParameters = new ArrayList<>();
387+
allParameters.addAll(HttpUtils.parseUrlQuery(getUrl().getQuery(), getCharset()));
388+
allParameters.addAll(getRequestParameters());
389+
return normalize(allParameters);
383390
}
384391

385392
// for instance a PUT or PATCH request

src/test/java/org/htmlunit/WebRequestTest.java

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.net.URL;
2323
import java.nio.charset.StandardCharsets;
2424
import java.util.ArrayList;
25+
import java.util.Collections;
2526
import java.util.List;
2627

2728
import org.apache.http.auth.BasicUserPrincipal;
@@ -394,6 +395,43 @@ public void getParametersFromUrlEncodedBodyPost() throws Exception {
394395
assertEquals("u", request.getParameters().get(0).getValue());
395396
}
396397

398+
/**
399+
* @throws Exception if the test fails
400+
*/
401+
@Test
402+
public void getParametersFromQueryAndUrlEncodedBodyPost() throws Exception {
403+
final URL url = new URL("http://localhost/test?a=b");
404+
final WebRequest request = new WebRequest(url);
405+
request.setHttpMethod(HttpMethod.POST);
406+
request.setEncodingType(FormEncodingType.URL_ENCODED);
407+
request.setRequestBody("c=d");
408+
409+
final List<NameValuePair> parameters = request.getParameters();
410+
411+
assertEquals(2, parameters.size());
412+
assertEquals("a", parameters.get(0).getName());
413+
assertEquals("b", parameters.get(0).getValue());
414+
assertEquals("c", parameters.get(1).getName());
415+
assertEquals("d", parameters.get(1).getValue());
416+
}
417+
418+
@Test
419+
public void getParametersFromQueryAndUrlEncodedBodyPostWhenEncodingTypeIsMultipart() throws Exception {
420+
final URL url = new URL("http://localhost/test?a=b");
421+
final WebRequest request = new WebRequest(url);
422+
request.setHttpMethod(HttpMethod.POST);
423+
request.setEncodingType(FormEncodingType.MULTIPART);
424+
request.setRequestParameters(Collections.singletonList(new NameValuePair("c", "d")));
425+
426+
final List<NameValuePair> parameters = request.getParameters();
427+
428+
assertEquals(2, parameters.size());
429+
assertEquals("a", parameters.get(0).getName());
430+
assertEquals("b", parameters.get(0).getValue());
431+
assertEquals("c", parameters.get(1).getName());
432+
assertEquals("d", parameters.get(1).getValue());
433+
}
434+
397435
/**
398436
* @throws Exception if the test fails
399437
*/

0 commit comments

Comments
 (0)