Skip to content

Commit 45e1fe8

Browse files
authored
REST high-level client: move to POST when calling API to retrieve which support request body (#28342)
It has been pointed out that GET with body may cause problems to some proxies. We are then switching to POST the API that retrieve info and support a request body. Closes #28326
1 parent 9db23e4 commit 45e1fe8

File tree

3 files changed

+29
-22
lines changed

3 files changed

+29
-22
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,7 @@ static Request multiGet(MultiGetRequest multiGetRequest) throws IOException {
358358
parameters.withRealtime(multiGetRequest.realtime());
359359
parameters.withRefresh(multiGetRequest.refresh());
360360
HttpEntity entity = createEntity(multiGetRequest, REQUEST_BODY_CONTENT_TYPE);
361-
return new Request(HttpGet.METHOD_NAME, "/_mget", parameters.getParams(), entity);
361+
return new Request(HttpPost.METHOD_NAME, "/_mget", parameters.getParams(), entity);
362362
}
363363

364364
static Request index(IndexRequest indexRequest) {
@@ -447,17 +447,17 @@ static Request search(SearchRequest searchRequest) throws IOException {
447447
if (searchRequest.source() != null) {
448448
entity = createEntity(searchRequest.source(), REQUEST_BODY_CONTENT_TYPE);
449449
}
450-
return new Request(HttpGet.METHOD_NAME, endpoint, params.getParams(), entity);
450+
return new Request(HttpPost.METHOD_NAME, endpoint, params.getParams(), entity);
451451
}
452452

453453
static Request searchScroll(SearchScrollRequest searchScrollRequest) throws IOException {
454454
HttpEntity entity = createEntity(searchScrollRequest, REQUEST_BODY_CONTENT_TYPE);
455-
return new Request("GET", "/_search/scroll", Collections.emptyMap(), entity);
455+
return new Request(HttpPost.METHOD_NAME, "/_search/scroll", Collections.emptyMap(), entity);
456456
}
457457

458458
static Request clearScroll(ClearScrollRequest clearScrollRequest) throws IOException {
459459
HttpEntity entity = createEntity(clearScrollRequest, REQUEST_BODY_CONTENT_TYPE);
460-
return new Request("DELETE", "/_search/scroll", Collections.emptyMap(), entity);
460+
return new Request(HttpDelete.METHOD_NAME, "/_search/scroll", Collections.emptyMap(), entity);
461461
}
462462

463463
static Request multiSearch(MultiSearchRequest multiSearchRequest) throws IOException {
@@ -469,7 +469,7 @@ static Request multiSearch(MultiSearchRequest multiSearchRequest) throws IOExcep
469469
XContent xContent = REQUEST_BODY_CONTENT_TYPE.xContent();
470470
byte[] source = MultiSearchRequest.writeMultiLineFormat(multiSearchRequest, xContent);
471471
HttpEntity entity = new ByteArrayEntity(source, createContentType(xContent.type()));
472-
return new Request("GET", "/_msearch", params.getParams(), entity);
472+
return new Request(HttpPost.METHOD_NAME, "/_msearch", params.getParams(), entity);
473473
}
474474

475475
private static HttpEntity createEntity(ToXContent toXContent, XContentType xContentType) throws IOException {

client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
package org.elasticsearch.client;
2121

2222
import org.apache.http.HttpEntity;
23+
import org.apache.http.client.methods.HttpDelete;
24+
import org.apache.http.client.methods.HttpGet;
25+
import org.apache.http.client.methods.HttpHead;
26+
import org.apache.http.client.methods.HttpPost;
27+
import org.apache.http.client.methods.HttpPut;
2328
import org.apache.http.entity.ByteArrayEntity;
2429
import org.apache.http.entity.ContentType;
2530
import org.apache.http.entity.StringEntity;
@@ -138,19 +143,19 @@ public void testPing() {
138143
assertEquals("/", request.getEndpoint());
139144
assertEquals(0, request.getParameters().size());
140145
assertNull(request.getEntity());
141-
assertEquals("HEAD", request.getMethod());
146+
assertEquals(HttpHead.METHOD_NAME, request.getMethod());
142147
}
143148

144149
public void testInfo() {
145150
Request request = Request.info();
146151
assertEquals("/", request.getEndpoint());
147152
assertEquals(0, request.getParameters().size());
148153
assertNull(request.getEntity());
149-
assertEquals("GET", request.getMethod());
154+
assertEquals(HttpGet.METHOD_NAME, request.getMethod());
150155
}
151156

152157
public void testGet() {
153-
getAndExistsTest(Request::get, "GET");
158+
getAndExistsTest(Request::get, HttpGet.METHOD_NAME);
154159
}
155160

156161
public void testMultiGet() throws IOException {
@@ -200,7 +205,7 @@ public void testMultiGet() throws IOException {
200205
}
201206

202207
Request request = Request.multiGet(multiGetRequest);
203-
assertEquals("GET", request.getMethod());
208+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
204209
assertEquals("/_mget", request.getEndpoint());
205210
assertEquals(expectedParams, request.getParameters());
206211
assertToXContentBody(multiGetRequest, request.getEntity());
@@ -240,7 +245,7 @@ public void testDelete() {
240245
}
241246

242247
public void testExists() {
243-
getAndExistsTest(Request::exists, "HEAD");
248+
getAndExistsTest(Request::exists, HttpHead.METHOD_NAME);
244249
}
245250

246251
private static void getAndExistsTest(Function<GetRequest, Request> requestConverter, String method) {
@@ -317,7 +322,7 @@ public void testCreateIndex() throws IOException {
317322
Request request = Request.createIndex(createIndexRequest);
318323
assertEquals("/" + indexName, request.getEndpoint());
319324
assertEquals(expectedParams, request.getParameters());
320-
assertEquals("PUT", request.getMethod());
325+
assertEquals(HttpPut.METHOD_NAME, request.getMethod());
321326
assertToXContentBody(createIndexRequest, request.getEntity());
322327
}
323328

@@ -365,7 +370,7 @@ public void testPutMapping() throws IOException {
365370
assertEquals(endpoint.toString(), request.getEndpoint());
366371

367372
assertEquals(expectedParams, request.getParameters());
368-
assertEquals("PUT", request.getMethod());
373+
assertEquals(HttpPut.METHOD_NAME, request.getMethod());
369374
assertToXContentBody(putMappingRequest, request.getEntity());
370375
}
371376

@@ -382,7 +387,7 @@ public void testDeleteIndex() {
382387
Request request = Request.deleteIndex(deleteIndexRequest);
383388
assertEquals("/" + String.join(",", indices), request.getEndpoint());
384389
assertEquals(expectedParams, request.getParameters());
385-
assertEquals("DELETE", request.getMethod());
390+
assertEquals(HttpDelete.METHOD_NAME, request.getMethod());
386391
assertNull(request.getEntity());
387392
}
388393

@@ -401,7 +406,7 @@ public void testOpenIndex() {
401406
StringJoiner endpoint = new StringJoiner("/", "/", "").add(String.join(",", indices)).add("_open");
402407
assertThat(endpoint.toString(), equalTo(request.getEndpoint()));
403408
assertThat(expectedParams, equalTo(request.getParameters()));
404-
assertThat(request.getMethod(), equalTo("POST"));
409+
assertThat(request.getMethod(), equalTo(HttpPost.METHOD_NAME));
405410
assertThat(request.getEntity(), nullValue());
406411
}
407412

@@ -418,7 +423,7 @@ public void testCloseIndex() {
418423
StringJoiner endpoint = new StringJoiner("/", "/", "").add(String.join(",", indices)).add("_close");
419424
assertThat(endpoint.toString(), equalTo(request.getEndpoint()));
420425
assertThat(expectedParams, equalTo(request.getParameters()));
421-
assertThat(request.getMethod(), equalTo("POST"));
426+
assertThat(request.getMethod(), equalTo(HttpPost.METHOD_NAME));
422427
assertThat(request.getEntity(), nullValue());
423428
}
424429

@@ -432,9 +437,9 @@ public void testIndex() throws IOException {
432437

433438
Map<String, String> expectedParams = new HashMap<>();
434439

435-
String method = "POST";
440+
String method = HttpPost.METHOD_NAME;
436441
if (id != null) {
437-
method = "PUT";
442+
method = HttpPut.METHOD_NAME;
438443
if (randomBoolean()) {
439444
indexRequest.opType(DocWriteRequest.OpType.CREATE);
440445
}
@@ -569,7 +574,7 @@ public void testUpdate() throws IOException {
569574
Request request = Request.update(updateRequest);
570575
assertEquals("/" + index + "/" + type + "/" + id + "/_update", request.getEndpoint());
571576
assertEquals(expectedParams, request.getParameters());
572-
assertEquals("POST", request.getMethod());
577+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
573578

574579
HttpEntity entity = request.getEntity();
575580
assertTrue(entity instanceof ByteArrayEntity);
@@ -683,7 +688,7 @@ public void testBulk() throws IOException {
683688
Request request = Request.bulk(bulkRequest);
684689
assertEquals("/_bulk", request.getEndpoint());
685690
assertEquals(expectedParams, request.getParameters());
686-
assertEquals("POST", request.getMethod());
691+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
687692
assertEquals(xContentType.mediaTypeWithoutParameters(), request.getEntity().getContentType().getValue());
688693
byte[] content = new byte[(int) request.getEntity().getContentLength()];
689694
try (InputStream inputStream = request.getEntity().getContent()) {
@@ -894,6 +899,7 @@ public void testSearch() throws Exception {
894899
endpoint.add(type);
895900
}
896901
endpoint.add("_search");
902+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
897903
assertEquals(endpoint.toString(), request.getEndpoint());
898904
assertEquals(expectedParams, request.getParameters());
899905
assertToXContentBody(searchSourceBuilder, request.getEntity());
@@ -932,6 +938,7 @@ public void testMultiSearch() throws IOException {
932938

933939
Request request = Request.multiSearch(multiSearchRequest);
934940
assertEquals("/_msearch", request.getEndpoint());
941+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
935942
assertEquals(expectedParams, request.getParameters());
936943

937944
List<SearchRequest> requests = new ArrayList<>();
@@ -955,7 +962,7 @@ public void testSearchScroll() throws IOException {
955962
searchScrollRequest.scroll(randomPositiveTimeValue());
956963
}
957964
Request request = Request.searchScroll(searchScrollRequest);
958-
assertEquals("GET", request.getMethod());
965+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
959966
assertEquals("/_search/scroll", request.getEndpoint());
960967
assertEquals(0, request.getParameters().size());
961968
assertToXContentBody(searchScrollRequest, request.getEntity());
@@ -969,7 +976,7 @@ public void testClearScroll() throws IOException {
969976
clearScrollRequest.addScrollId(randomAlphaOfLengthBetween(5, 10));
970977
}
971978
Request request = Request.clearScroll(clearScrollRequest);
972-
assertEquals("DELETE", request.getMethod());
979+
assertEquals(HttpDelete.METHOD_NAME, request.getMethod());
973980
assertEquals("/_search/scroll", request.getEndpoint());
974981
assertEquals(0, request.getParameters().size());
975982
assertToXContentBody(clearScrollRequest, request.getEntity());

client/rest-high-level/src/test/java/org/elasticsearch/client/RestHighLevelClientTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public void testSearchScroll() throws IOException {
179179
assertEquals(5, searchResponse.getTotalShards());
180180
assertEquals(5, searchResponse.getSuccessfulShards());
181181
assertEquals(100, searchResponse.getTook().getMillis());
182-
verify(restClient).performRequest(eq("GET"), eq("/_search/scroll"), eq(Collections.emptyMap()),
182+
verify(restClient).performRequest(eq("POST"), eq("/_search/scroll"), eq(Collections.emptyMap()),
183183
isNotNull(HttpEntity.class), argThat(new HeadersVarargMatcher(headers)));
184184
}
185185

0 commit comments

Comments
 (0)