Java通过HttpClient进行HTTP请求的代码详解

 更新时间:2023年05月19日 08:51:50   作者:MerkleJqueryRu  
Apache HttpClient是一个功能强大且广泛使用的Java库,它提供了方便的方法来执行HTTP请求并处理响应。本文将介绍如何使用HttpClient库进行HTTP请求,包括GET请求、POST请求、添加参数和请求体、设置请求头等操作,需要的朋友可以参考下

引言: 在现代的网络应用程序中,进行HTTP请求是一项常见的任务。Apache HttpClient是一个功能强大且广泛使用的Java库,它提供了方便的方法来执行HTTP请求并处理响应。本文将介绍如何使用HttpClient库进行HTTP请求,包括GET请求、POST请求、添加参数和请求体、设置请求头等操作。

HttpClient简介: HttpClient是一个开源的Java库,用于处理HTTP通信。它提供了各种类和方法,使得执行HTTP请求变得简单而直观。HttpClient不仅支持基本的HTTP协议功能,还提供了更高级的功能,如连接管理、cookie管理、代理设置等。

导入HttpClient库

在使用HttpClient之前,需要在项目中导入HttpClient库。可以通过在Maven项目的pom.xml文件中添加以下依赖项来实现:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.13</version>
</dependency>

发起GET请求

GET请求是获取服务器资源的一种常见方式。下面是使用HttpClient进行GET请求的示例代码:

HttpGet httpGet = new HttpGet("http://httpbin.org/get");
CloseableHttpResponse response = client.execute(httpGet);
System.out.println(EntityUtils.toString(response.getEntity()));

在上述代码中,我们创建了一个HttpGet对象,并传入要请求的URL。然后使用HttpClient的execute方法发送请求并获取响应。最后,通过EntityUtils将响应内容转换为字符串并进行输出。

发起POST请求

POST请求用于向服务器提交数据。下面是使用HttpClient进行POST请求的示例代码:

HttpPost httpPost = new HttpPost("http://httpbin.org/post");
CloseableHttpResponse response = client.execute(httpPost);
System.out.println(EntityUtils.toString(response.getEntity()));

与GET请求相比,POST请求的代码几乎相同。只需将HttpGet替换为HttpPost即可。

添加请求参数

有时候我们需要在请求中添加参数。使用HttpClient的URIBuilder类可以方便地构建带有参数的URL。下面是一个示例:

URIBuilder builder = new URIBuilder("http://httpbin.org/post");
builder.addParameter("name", "Ru");
builder.addParameter("age", "18");
URI uri = builder.build();
HttpPost httpPost = new HttpPost(uri);
CloseableHttpResponse response = client.execute(httpPost);
System.out.println(EntityUtils.toString(response.getEntity()));

在上述代码中,我们创建了一个URIBuilder对象,并使用addParameter方法添加了两个参数。然后通过build方法生成最终的URI,将其传递给HttpPost对象进行请求。

设置请求体

有时候我们需要在POST请求中添加请求体,通常使用JSON格式进行数据传输。下面是一个示例:

HttpPost httpPost = new HttpPost("http://httpbin.org/post");  
String jsonBody = "{"name": "Ru", "age": 18}";  
// 设置请求头部信息  
httpPost.setHeader("Content-Type", "application/json");  
  
// 设置请求体  
StringEntity requestEntity = new StringEntity(jsonBody, ContentType.APPLICATION_JSON);  
httpPost.setEntity(requestEntity);  
CloseableHttpResponse response = client.execute(httpPost);  
HttpEntity responseEntity = response.getEntity();  
if (responseEntity != null) {  
    String responseBody = EntityUtils.toString(responseEntity);  
    System.out.println(responseBody);  
}

在上述代码中,我们首先设置了请求的Content-Type为application/json,然后创建了一个StringEntity对象来封装请求体数据。将其设置为HttpPost对象的实体,并执行请求。最后,通过EntityUtils将响应体转换为字符串并进行输出。

设置请求头

有时候我们需要在请求中添加自定义的请求头信息,如User-Agent、Authorization等。下面是一个示例:

HttpGet httpGet = new HttpGet("http://httpbin.org/get");
httpGet.setHeader("User-Agent", "MyHttpClient/1.0");
httpGet.setHeader("Authorization", "Bearer my_token");
CloseableHttpResponse response = client.execute(httpGet);
System.out.println(EntityUtils.toString(response.getEntity()));

在上述代码中,我们使用setHeader方法设置了两个自定义的请求头信息,然后执行GET请求并输出响应结果。

完整demo:

package org.example.TestMaven;
​
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
​
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
​
public class HttpClientDemo {
    static CloseableHttpClient client = HttpClients.createDefault();
​
    public static void main(String[] args) throws IOException, URISyntaxException {
​
//        httpGetDemo();
//        httpPostDemo();
//        httpParamsDemo();
//        httpBodyDemo();
        httpHeaderDemo();
    }
    public static void httpGetDemo() throws IOException {
        HttpGet httpGet = new HttpGet("http://httpbin.org/get");
        CloseableHttpResponse response = client.execute(httpGet);
        System.out.println(EntityUtils.toString(response.getEntity()));
    }
​
    public static void httpPostDemo() throws IOException {
        HttpPost httpPost = new HttpPost("http://httpbin.org/post");
        CloseableHttpResponse response = client.execute(httpPost);
        System.out.println(EntityUtils.toString(response.getEntity()));
    }
​
    public static void httpParamsDemo() throws IOException, URISyntaxException {
        URIBuilder builder = new URIBuilder("http://httpbin.org/post");
        builder.addParameter("name", "Ru");
        builder.addParameter("age", "18");
        URI uri = builder.build();
        HttpPost httpPost = new HttpPost(uri);
        CloseableHttpResponse response = client.execute(httpPost);
        System.out.println(EntityUtils.toString(response.getEntity()));
    }
​
    public static void httpBodyDemo() throws IOException {
        HttpPost httpPost = new HttpPost("http://httpbin.org/post");
        String jsonBody = "{"name": "Ru", "age": 18}";
        // 设置请求头部信息
        httpPost.setHeader("Content-Type", "application/json");
​
        // 设置请求体
        StringEntity requestEntity = new StringEntity(jsonBody, ContentType.APPLICATION_JSON);
        httpPost.setEntity(requestEntity);
        CloseableHttpResponse response = client.execute(httpPost);
        HttpEntity responseEntity = response.getEntity();
        if (responseEntity != null) {
            String responseBody = EntityUtils.toString(responseEntity);
            System.out.println(responseBody);
        }
    }
​
    public static void httpHeaderDemo() throws IOException {
        HttpGet httpGet = new HttpGet("http://httpbin.org/get");
        httpGet.setHeader("User-Agent", "MyHttpClient/1.0");
        httpGet.setHeader("Authorization", "Bearer my_token");
        CloseableHttpResponse response = client.execute(httpGet);
        System.out.println(EntityUtils.toString(response.getEntity()));
    }
​
}
​

结论: 本文介绍了如何使用HttpClient库进行HTTP请求的常见操作,包括GET请求、POST请求、添加请求参数和请求体、设置请求头等。通过使用HttpClient,我们可以轻松地与服务器进行通信并处理响应数据。希望本文对你理解和使用HttpClient有所帮助!

到此这篇关于Java通过HttpClient进行HTTP请求的代码详解的文章就介绍到这了,更多相关Java HttpClient进行HTTP请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot实现动态多线程并发定时任务

    SpringBoot实现动态多线程并发定时任务

    这篇文章主要为大家详细介绍了SpringBoot实现动态多线程并发定时任务,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • 介绍Jersey-Jersey入门基础

    介绍Jersey-Jersey入门基础

    REST不是一种新的技术,而仅仅是一个理论,实践这样的理论可以让我们的应用更加先进。
    2013-02-02
  • SpringBoot JPA实现增删改查、分页、排序、事务操作等功能示例

    SpringBoot JPA实现增删改查、分页、排序、事务操作等功能示例

    本篇文章主要介绍了SpringBoot JPA实现增删改查、分页、排序、事务操作等功能示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • idea如何关闭页面显示的浏览器图标

    idea如何关闭页面显示的浏览器图标

    这篇文章主要介绍了idea如何关闭页面显示的浏览器图标问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • MyBatis的动态SQL语句实现

    MyBatis的动态SQL语句实现

    这篇文章主要介绍了MyBatis的动态SQL语句实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • springboot定时任务@Scheduled执行多次的问题

    springboot定时任务@Scheduled执行多次的问题

    这篇文章主要介绍了springboot定时任务@Scheduled执行多次问题的解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 详解Springboot配置文件的使用

    详解Springboot配置文件的使用

    在springboot项目中,也可以使用yml类型的配置文件代替properties文件。接下来通过本文给大家分享Springboot配置文件的使用,感兴趣的朋友一起看看吧
    2017-07-07
  • Java中json处理工具JsonPath的使用教程

    Java中json处理工具JsonPath的使用教程

    JsonPath类似于XPath,是一种json数据结构节点定位和导航表达式语言,这篇文章主要为大家介绍了JsonPath的基本使用,需要的小伙伴可以参考下
    2023-08-08
  • java实现选课系统

    java实现选课系统

    这篇文章主要为大家详细介绍了java实现选课系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • Java中的MapStruct实现详解

    Java中的MapStruct实现详解

    这篇文章主要介绍了Java中的MapStruct实现详解,MapStruct 是一个代码生成器,它基于约定优先于配置的方法大大简化了 JavaBean 类型之间映射的实现,生成的映射代码使用普通方法调用,需要的朋友可以参考下
    2023-11-11

最新评论