From ad4b43dea35d122405325a17df98be22fa841254 Mon Sep 17 00:00:00 2001 From: Peter Reutemann Date: Mon, 3 Aug 2020 08:39:53 +1200 Subject: [PATCH] added support for body in GET method --- README.md | 3 +- .../fracpete/requests4j/request/Method.java | 2 +- .../fracpete/requests4j/request/Request.java | 4 +- .../http/client/methods/HttpGetWithBody.java | 71 +++++++++++++++++++ 4 files changed, 76 insertions(+), 4 deletions(-) create mode 100644 src/main/java/org/apache/http/client/methods/HttpGetWithBody.java diff --git a/README.md b/README.md index 3ac9b49..0257134 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ The following sections describe how to use the library. ### Creating a request The following methods are supported through the `com.github.fracpete.requests4j.Requests` class: -* GET -- `Requests.get()` +* GET -- `Requests.get()` (also supports sending a payload, though this is not + recommended by [RFC 7231, section 4.3.1](https://tools.ietf.org/html/rfc7231#section-4.3.1)) * POST -- `Requests.post()` * PUT -- `Requests.put()` * PATCH -- `Requests.patch()` diff --git a/src/main/java/com/github/fracpete/requests4j/request/Method.java b/src/main/java/com/github/fracpete/requests4j/request/Method.java index 030de9f..db061fd 100644 --- a/src/main/java/com/github/fracpete/requests4j/request/Method.java +++ b/src/main/java/com/github/fracpete/requests4j/request/Method.java @@ -11,7 +11,7 @@ * @author FracPete (fracpete at waikato dot ac dot nz) */ public enum Method { - GET(false), + GET(true), POST(true), PUT(true), PATCH(true), diff --git a/src/main/java/com/github/fracpete/requests4j/request/Request.java b/src/main/java/com/github/fracpete/requests4j/request/Request.java index a175528..ab5f388 100644 --- a/src/main/java/com/github/fracpete/requests4j/request/Request.java +++ b/src/main/java/com/github/fracpete/requests4j/request/Request.java @@ -23,7 +23,7 @@ import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpDeleteWithBody; -import org.apache.http.client.methods.HttpGet; +import org.apache.http.client.methods.HttpGetWithBody; import org.apache.http.client.methods.HttpHead; import org.apache.http.client.methods.HttpOptions; import org.apache.http.client.methods.HttpPatch; @@ -885,7 +885,7 @@ protected T doExecute(T response) throws Exception { try { switch (m_Method) { case GET: - request = new HttpGet(url.toURI()); + request = new HttpGetWithBody(url.toURI()); break; case POST: request = new HttpPost(url.toURI()); diff --git a/src/main/java/org/apache/http/client/methods/HttpGetWithBody.java b/src/main/java/org/apache/http/client/methods/HttpGetWithBody.java new file mode 100644 index 0000000..048281c --- /dev/null +++ b/src/main/java/org/apache/http/client/methods/HttpGetWithBody.java @@ -0,0 +1,71 @@ +/* + * HttpGetWithBody.java + * Copyright (C) 2020 University of Waikato, Hamilton, NZ + */ + +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + */ + +package org.apache.http.client.methods; + +import org.apache.http.annotation.NotThreadSafe; + +import java.net.URI; + +/** + * HTTP GET method, but with support of sending a body, which is not + * recommended by the RFC 7231, section 4.3.1, + * but used by other frameworks (like requests and django). + */ +@NotThreadSafe +public class HttpGetWithBody extends HttpEntityEnclosingRequestBase { + + public final static String METHOD_NAME = "GET"; + + public HttpGetWithBody() { + super(); + } + + public HttpGetWithBody(final URI uri) { + super(); + setURI(uri); + } + + /** + * @throws IllegalArgumentException if the uri is invalid. + */ + public HttpGetWithBody(final String uri) { + super(); + setURI(URI.create(uri)); + } + + @Override + public String getMethod() { + return METHOD_NAME; + } + +}