Contents

将参数添加到apache httpclient请求

1.简介

HttpClient 是 Apache HttpComponents 项目的一部分,该项目提供了一个专注于 HTTP 和相关协议的低级 Java 组件工具集。HttpClient 最基本的功能是执行 HTTP 方法。

在这个简短的教程中,我们将讨论向HttpClient请求添加参数。我们将学习如何将UriBuilder与 String 名称-值对以及NameValuePair一起使用。同样,我们将看到如何使用UrlEncodedFormEntity传递参数。

2. 使用UriBuilderHttpClient请求添加参数

UriBuilder帮助我们通过构建器模式轻松创建 URI 和添加参数。我们可以使用String名称-值对添加参数,或者为此目的使用NameValuePair**的类。

在此示例中,最终到达 URL 应如下所示:

https://example.com?param1=value1&param2=value2

让我们看看如何使用String名称-值对:

public CloseableHttpResponse sendHttpRequest() {
    HttpGet httpGet = new HttpGet("https://example.com");
    URI uri = new URIBuilder(httpGet.getURI())
      .addParameter("param1", "value1")
      .addParameter("param2", "value2")
      .build();
   ((HttpRequestBase) httpGet).setURI(uri);
    CloseableHttpResponse response = client.execute(httpGet);
    client.close();
}

此外,我们可以使用HttpClient请求的NameValuePair列表:

public CloseableHttpResponse sendHttpRequest() {
    List nameValuePairs = new ArrayList();
    nameValuePairs.add(new BasicNameValuePair("param1", "value1"));
    nameValuePairs.add(new BasicNameValuePair("param2", "value2"));
    HttpGet httpGet = new HttpGet("https://example.com");
    URI uri = new URIBuilder(httpGet.getURI())
      .addParameters(nameValuePairs)
      .build();
   ((HttpRequestBase) httpGet).setURI(uri);
    CloseableHttpResponse response = client.execute(httpGet);
    client.close();
}

类似地,UriBuilder可用于向其他 HttpClient 请求方法添加参数。

3. 使用UrlEncodedFormEntityHttpClient请求添加参数

另一种方法是利用UrlEncodedFormEntity

public CloseableHttpResponse sendHttpRequest() {
    List nameValuePairs = new ArrayList();
    nameValuePairs.add(new BasicNameValuePair("param1", "value1"));
    nameValuePairs.add(new BasicNameValuePair("param2", "value2"));
    HttpPost httpPost = new HttpPost("https://example.com");
    httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs, StandardCharsets.UTF_8));
    CloseableHttpResponse response = client.execute(httpPost);
    client.close();
}

请注意,UrlEncodedFormEntity不能用于 GET 请求,因为 GET 请求没有可以包含实体的主体。