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请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析Java Mail无法解析带分号的收件人列表的问题

    浅析Java Mail无法解析带分号的收件人列表的问题

    JAVA MAIL严格按照RFC 822规范进行操作,没有对分号做处理。大多数邮件服务器都是严格遵循RFC 822规范的
    2013-08-08
  • 解决rocketmq-client日志保存路径的问题

    解决rocketmq-client日志保存路径的问题

    这篇文章主要介绍了解决rocketmq-client日志保存路径的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • 基于断点续传下载原理的实现

    基于断点续传下载原理的实现

    下面小编就为大家带来一篇基于断点续传下载原理的实现。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Java 轻松掌握字符缓冲流的使用

    Java 轻松掌握字符缓冲流的使用

    这篇文章主要介绍了Java的字符缓冲流用法,字符缓冲流的用途很多,主要是几个构造方法的使用,在项目开发中经常会用到,需要的朋友参考下吧
    2022-04-04
  • Java中的HashMap和Hashtable区别解析

    Java中的HashMap和Hashtable区别解析

    这篇文章主要介绍了Java中的HashMap和Hashtable区别解析,HashMap和Hashtable都实现了Map接口,但决定用哪一个之前先要弄清楚它们之间的区别,主要的区别有线程安全性、同步和速度,需要的朋友可以参考下
    2023-11-11
  • java爱心代码完整示例(脱单必备)

    java爱心代码完整示例(脱单必备)

    最近看到个好玩的,就是用代码实现爱心的形状,对于不懂编程的人来说,这是一个很好的玩的东西,这篇文章主要给大家介绍了关于java爱心代码的相关资料,需要的朋友可以参考下
    2023-07-07
  • Java数据库连接池c3p0过程解析

    Java数据库连接池c3p0过程解析

    这篇文章主要介绍了Java数据库连接池c3p0过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 深入理解Java设计模式之桥接模式

    深入理解Java设计模式之桥接模式

    这篇文章主要介绍了JAVA设计模式之桥接模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下
    2021-11-11
  • Java基础教程之String深度分析

    Java基础教程之String深度分析

    这篇文章主要给大家介绍了关于Java基础教程之String的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-06-06
  • JavaWeb HttpServletResponse对象及常用方法

    JavaWeb HttpServletResponse对象及常用方法

    这篇文章主要介绍了JavaWeb-HttpServletResponse对象,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03

最新评论