HttpClient基本使用

这篇具有很好参考价值的文章主要介绍了HttpClient基本使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

HttpClient

一、初识HttpClient

HttpClient 是Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。

----百度百科

就是用来发送http请求或者解析http响应的。

二、HttpClient请求

当然在使用之前,需要导包,使用maven(不使用maven就要自己取下jar包,apache官网就有):

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

包导入之后,一般分为六步:

  1. 创建HttpClient实例
  2. 创建某种连接方法的实例
  3. 调用HttpClient实例的execute方法来执行请求方法
  4. 读取response
  5. 释放连接,无论执行方法是否成功

2.1 GET请求

我们先以GET请求为例

  1. 创建HttpClient实例

    CloseableHttpClient httpClient = HttpClients.createDefault();
    
  2. 创建GET请求方法实例

    HttpGet httpGet = new HttpGet("http://httpbin.org/get");
    
  3. 调用HttpClient实例执行GET实例,返回response

    CloseableHttpResponse response = httpClient.execute(httpGet);
    
  4. 解析response

    // 获取状态码
    int status = response.getStatusLine().getStatusCode();
    // 获取实例
    HttpEntity entity = response.getEntity();
    // 获取html
    String html = EntityUtils.toString(entity);
    
  5. 释放连接

    response.close();
    httpClient.close();
    

完整代码:

package vip.yangsf;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DecompressingHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import sun.plugin.dom.html.HTMLDocument;

import java.io.IOException;

public class GetTest {
    public static void main(String[] args) throws IOException {
        // 1. 创建HttpClient实例
        CloseableHttpClient httpClient = HttpClients.createDefault();
        // 2. 创建GET请求方法实例
        HttpGet httpGet = new HttpGet("http://test.yangsf.vip");
        // 3. 调用HttpClient实例来执行GET请求方法,得到response
        CloseableHttpResponse response = httpClient.execute(httpGet);
        // 4. 读response,判断是否访问成功 2xx表示 成功。
        int status = response.getStatusLine().getStatusCode();
        if (status >= 200 && status < 300) {
            // 对得到后的实例可以进行处理,例如读取回复体,读取html
            HttpEntity entity = response.getEntity();
            System.out.println(response);
            System.out.println("=======================");
            String html = EntityUtils.toString(entity);
            System.out.println(html);
        } else {
            throw new ClientProtocolException("Unexpected response status: " + status);
        }

        // 6. 释放连接
        response.close();
        httpClient.close();
    }
}

2.2 POST请求

步骤基本上一模一样,只不过可以设置让post带上参数:

httpPost.setEntity(new StringEntity("this is Post"));

package vip.yangsf;

import com.sun.xml.internal.ws.api.pipe.ContentType;
import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
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;

public class PostTest {
        public static void main(String... args) throws IOException {
            // 1. 创建HttpClient实例
            CloseableHttpClient httpclient = HttpClients.createDefault();

            // 2. 创建HttpPost实例
            HttpPost httpPost = new HttpPost("http://httpbin.org/post");
            httpPost.setEntity(new StringEntity("this is Post"));

            // 3. 调用HttpClient实例来执行HttpPost实例
            CloseableHttpResponse response = httpclient.execute(httpPost);
            // 4. 读 response
            int status = response.getStatusLine().getStatusCode();
            if (status >= 200 && status < 300) {
                HttpEntity entity = response.getEntity();
                System.out.println(response);
                System.out.println("===================");
                String html = EntityUtils.toString(entity);
                System.out.println(html);
            } else {
                throw new ClientProtocolException("Unexpected response status: " + status);
            }
            // 5. 释放连接
            response.close();
            httpclient.close();
        }
}

效果:

HttpClient基本使用

其他请求方法比如put,delete等也是大同小异。

三、HttpClient提交表单

提交表单一共就这几步:

  1. 创建http实例
  2. 创建Post请求
  3. 设置表单参数并让Post携带
  4. 执行请求,获取响应
  5. 解析响应
  6. 关闭资源
package vip.yangsf;

import org.apache.http.Consts;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class FormSubmitTest {
    public static void main(String[] args) throws IOException {
        // 1. 创建HttpClient实例
        CloseableHttpClient httpClient = HttpClients.createDefault();

        // 2. 设置表单参数
        List<NameValuePair> kv =  new ArrayList<>();
        kv.add(new BasicNameValuePair("name", "root"));
        kv.add(new BasicNameValuePair("password", "123456"));

        // 3. 创建HttpPost实例
        HttpPost httpPost = new HttpPost("http://httpbin.org/post");

        // 4. 让Post携带表单参数
        httpPost.setEntity(new UrlEncodedFormEntity(kv, Consts.UTF_8));

        // 5. 获取HttpResponse响应
        CloseableHttpResponse response = httpClient.execute(httpPost);

        // 6. 读response
        System.out.println(EntityUtils.toString(response.getEntity()));

        // 7. 释放资源
        response.close();
        httpClient.close();
    }
}

结果:

HttpClient基本使用

HttpClient最基本的用法就是这些。之后可以去官方文档查阅更多的用法,比如HttpClient还可以获取证书,上传文件等等。文章来源地址https://www.toymoban.com/news/detail-432065.html

到了这里,关于HttpClient基本使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 4.5日学习打卡----学习Apache HttpClient 5

    Apache HttpClient 组件是为扩展而设计的,同时提供对基本HTTP协议的强大支持。 http://java.net包提供了通过HTTP访问资源的基本功能,但它并没有提供许多应用程序所需的全部灵活性或功能。HttpClient 组件通过提供一个高效、最新、功能丰富的包来填补这一空白,该包实现了最新H

    2024年04月11日
    浏览(29)
  • 【Java万花筒】解码Java网络通讯谜团:对比Apache HttpClient、OkHttp、Feign、RestTemplate、Retrofit

    在当今互联网时代,Java开发者常常需要处理与各种RESTful服务的通信。本文旨在深入比较Java中几个主流的网络请求库,包括Apache HttpClient、OkHttp、Feign、RestTemplate、Retrofit。通过全面的介绍和示例代码,读者将能够了解它们的特点、优势以及如何在实际项目中使用。 欢迎订阅专

    2024年01月25日
    浏览(49)
  • 关于初识MySQL数据库以及MySQL的基本使用

    数据库一般是指: 在磁盘或者内存中存储的特定结构组织的数据 。 其本质可以理解为: 对数据内容存储的一套解决方案,对数据库提供要求或字段,它会给用户返回结果 MySQL是 一套给用户提供数据存取的服务,是一种网络程序 那么在系统中会存在mysql和mysqld,如何区分两

    2024年02月16日
    浏览(58)
  • javax.servlet 和 jakarta.servlet的关系和使用tomcat部署 jakarta.servlet

    1,javax.servlet 和 jakarta.servlet的关系 javax.servlet 和 jakarta.servlet 是 Java Servlet API 的两个版本。 Java Servlet API 是由 Sun Microsystems(现在是 Oracle)开发和维护的,其包名以 javax.servlet 开头。从 Java EE 8 开始,Servlet API 的维护权转交给了 Eclipse Foundation 的 Jakarta EE 社区,因此,在最新的

    2024年01月20日
    浏览(47)
  • 【Spring Cloud】如何把Feign默认的HTTP客户端URLConnection更换成支持连接池的Apache HttpClient或OKHttp

    本次示例代码的文件结构如下图所示。 Feign 发送 HTTP 请求时,底层会使用到别的客户端。下面列出常用的 3 种 HTTP 客户端。 HTTP客户端 特点 URLConnection Feign 的默认实现,不支持连接池 Apache HttpClient 支持连接池 OKHttp 支持连接池 其中, URLConnection 是 Feign 默认使用的 HTTP 客户端

    2024年02月14日
    浏览(54)
  • apache-commons-lang3 的基本使用

    更多用法

    2024年01月20日
    浏览(70)
  • Apache POI技术-在Java中的基本使用

    Apache POI(Poor Obfuscation Implementation)是Apache软件基金会的一个开源项目,提供了用于读写Microsoft Office格式文件(如Word文档、Excel表格、PowerPoint幻灯片)的Java API。POI技术使Java开发人员能够轻松地操作和处理Office文档,为他们提供了丰富的功能和灵活性。 Apache POI 是一个处理

    2024年02月22日
    浏览(38)
  • 【Docker】初识 Docker,Docker 基本命令的使用,Dockerfile 自定义镜像的创建

    在部署大型项目时,常常面临多组件、复杂的依赖关系和不同环境之间的差异,这些因素可能导致以下问题: 复杂的依赖关系: 由于项目组件众多,各个组件之间的依赖关系变得复杂,容易出现版本不匹配或兼容性问题。 兼容性问题: 项目在不同的环境中可能会遇到兼容性

    2024年02月05日
    浏览(61)
  • 【Apache Flink】Flink DataStream API的基本使用

    Flink DataStream API的基本使用 Flink DataStream API主要用于处理无界和有界数据流 。 无界数据流 是一个持续生成数据的数据源,它没有明确的结束点,例如实时的交易数据或传感器数据。这种类型的数据流需要使用Apache Flink的实时处理功能来连续地处理和分析。 有界数据流 是一个

    2024年02月06日
    浏览(39)
  • 初识微信小程序之swiper和swiper-item的基本使用

    在我还没接触到微信小程序之前,通常使用轮播要么手写或使用swiper插件去实现,当我接触到微信小程序之后,我看到了微信小程序的强大之处,让我为大家介绍一下吧! swiper与swiper-item一起使用可以做轮播图 基本使用,上代码: 样式 swiper当中常用的属性 属性 类型 默认值

    2024年04月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包