使用HttpClient发送带body的GET请求

本文介绍了一种自定义方式,通过创建一个继承了HttpEntityEnclosingRequestBase的HttpGetWithEntity类来实现带有body的GET请求。这种方法适用于某些特殊场景需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有时候我们会有一些奇怪的需求,比如使用带body的GET请求来请求数据,虽然HTTP协议里并没有禁止使用带body的GET请求,但是一般我们并不使用这种请求格式,而且HttpClient本身并没有定义带body的GET请求。此时怎么办呢?

我们可以自己定义一个带body的GET请求。首先,我们可以定义一个继承了 HttpEntityEnclosingRequestBase 的 HttpGetWithEntity 类,设置其请求方法为 GET:

import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;

import java.net.URI;

public class HttpGetWithEntity extends HttpEntityEnclosingRequestBase {

    private final static String METHOD_NAME = "GET";

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

    public HttpGetWithEntity() {
        super();
    }

    public HttpGetWithEntity(final URI uri) {
        super();
        setURI(uri);
    }

    HttpGetWithEntity(final String uri) {
        super();
        setURI(URI.create(uri));
    }
}

然后,在调用时

HttpGetWithEntity oHttpGet = new HttpGetWithEntity(url);
HttpEntity httpEntity = new StringEntity(body, ContentType.APPLICATION_JSON);
oHttpGet.setEntity(httpEntity);

参考

https://stackoverflow.com/questions/12535016/apache-httpclient-get-with-body

### 使用Java中的HttpClient发送参数的GET请求 为了通过Java中的`HttpClient`发送有参数的GET请求,可以构建URL字符串来包含查询参数。下面是一个具体的例子说明如何实现这一点: ```java import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.io.IOException; public class HttpGetExample { public static void main(String[] args) throws IOException, InterruptedException { String url = "http://example.com/api?"; StringBuilder queryBuilder = new StringBuilder(url); // Add parameters to the URL string. addQueryParameter(queryBuilder, "param1", "value1"); addQueryParameter(queryBuilder, "param2", "value2"); HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(queryBuilder.toString())) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body()); } private static void addQueryParameter(StringBuilder builder, String key, String value){ if (builder.indexOf("?") < 0) builder.append('?'); else builder.append('&'); builder.append(key).append('=').append(value); } } ``` 此代码片段展示了创建HTTP客户端实例并设置目标资源地址的过程[^1]。对于每一个想要作为查询的一部分传递给服务器的关键字/值对,调用一次`addQueryParameter()`方法将其附加到基础URL上。 当准备就绪之后,利用`HttpRequest.Builder`类配置新的请求对象,并指定其URI以及任何必要的头部信息或其他属性;最后执行该请求并通过处理程序接收响应数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值