java 我如何发送一个带正文的HTTP GET?

nukf8bse  于 2023-03-06  发布在  Java
关注(0)|答案(3)|浏览(156)

老板想让我们发送一个正文带参数的HTTP GET,我想不出用org.apache.commons.httpclient.methods.getMethod或者java .NET.HttpURLConnection怎么做;。
GetMethod似乎不带任何参数,我不确定如何使用HttpURLConnection来实现这一点。

js5cn81o

js5cn81o1#

您可以扩展HttpEntityEnclosingRequestBase类以覆盖继承的org.apache.http.client.methods.HttpRequestBase.getMethod(),但事实上HTTP GET不支持正文请求,并且可能会遇到一些HTTP服务器的问题,使用风险自担:)

public class MyHttpGetWithEntity extends HttpEntityEnclosingRequestBase {
    public final static String GET_METHOD = "GET";
    
    public MyHttpGetWithEntity(final URI uri) {
        super();
        setURI(uri);
    }
    
    public MyHttpGetWithEntity(final String uri) {
        super();
        setURI(URI.create(uri));
    }

    @Override
    public String getMethod() {
        return GET_METHOD;
    }
}

then

    import org.apache.commons.io.IOUtils;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.DefaultHttpClient;
    
    public class HttpEntityGet {
    
        public static void main(String[] args) {
            
            try {
                HttpClient client = new DefaultHttpClient();
                MyHttpGetWithEntity e = new MyHttpGetWithEntity("http://....");
                e.setEntity(new StringEntity("mystringentity"));
                HttpResponse response = client.execute(e);
                System.out.println(IOUtils.toString(response.getEntity().getContent()));
            } catch (Exception e) {
                System.err.println(e);
            }
        }
    }
1bqhqjot

1bqhqjot2#

HTTP GET方法不应有正文部分。可以使用URL查询字符串或HTTP标头传递参数。
如果你想有一个BODY节,使用POST或其他方法。

vlju58qv

vlju58qv3#

使用java.net.http.HttpRequest时,如果使用RequestBuilder构建一个,而不是使用不带参数的.GET()方法,请使用.method(method, bodyPublisher)

HttpClient clientFwd = HttpClient.newHttpClient();
HttpRequest get = HttpRequest.newBuilder()
            .uri(URI.create(YOURURI))
            //GET, POST, PUT,..
            .method("GET", HttpRequest.BodyPublishers.ofString(bodyGet))
            .header("Content-Type", "application/json")
            .header("Authorization", "Bearer "+TOKEN)
            .build();

然后get.send()您的HttpRequest以获得您的响应。

相关问题