HTTPClient和CloseableHttpClient

使用HttpClient发送请求的一般步骤(1)创建HttpClient对象。(2)创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。(3)如果需要发送请求参数,可调用HttpGet同的setParams(HetpParamsparams)方法来添加请求参数;对于HttpPost对象而言,可调…

大家好,又见面了,我是你们的朋友全栈君。

使用HttpClient发送请求的一般步骤 
(1) 创建HttpClient对象。 
(2)创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;如果需要发送POST请求,创建HttpPost对象。 
(3) 如果需要发送请求参数,可调用HttpGet同的setParams(HetpParams params)方法来添加请求参数;对于HttpPost对象而言,可调用setEntity(HttpEntity entity)方法来设置请求参数。 
(4) 调用HttpClient对象的execute(HttpUriRequest request)发送请求,该方法返回一个HttpResponse。 
(5) 调用HttpResponse的getAllHeaders()、getHeaders(String name)等方法可获取服务器的响应头;调用HttpResponse的getEntity()方法可获取HttpEntity对象,该对象包装了服务器的响应内容。程序可通过该对象获取服务器的响应内容。 
(6) 释放连接。无论执行方法是否成功,都必须释放连接

下面分别介绍使用HTTPClient和CloseableHTTPClient进行Get和Post请求的方式。

HttpClient

使用commons-httpclient.jar,maven依赖如下:

    <dependency>
      <groupId>commons-httpclient</groupId>
      <artifactId>commons-httpclient</artifactId>
      <version>3.1</version>
    </dependency>

java示例代码如下:

package com.example.study.demo.http;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

import java.io.IOException;

/**
 * HttpClient使用示例
 * jar包:commons-httpclient.jar
 */
public class HttpClientTest {
  private static void doGet() {
    HttpClient client = new HttpClient();
    GetMethod getMethod = new GetMethod("https://www.thepaper.cn/");
    int code = 0;
    try {
      code = client.executeMethod(getMethod);
      if (code == 200) {
        String res = getMethod.getResponseBodyAsString();
        System.out.println(res);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  private static void doPost() {
    String praiseUrl = "https://www.thepaper.cn/www/commentPraise.msp"; // 澎湃新闻评论点赞url
    HttpClient client = new HttpClient();
    PostMethod postMethod = new PostMethod(praiseUrl);
    // 必须设置下面这个Header
    postMethod.addRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
    postMethod.addParameter("commentId", "18718372"); // 评论的id,抓包获得
    try {
      int code = client.executeMethod(postMethod);
      if (code == 200) {
        String res = postMethod.getResponseBodyAsString();
        System.out.println(res);
      }
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public static void main(String[] args) {
    doGet();
    System.out.println("-----------分割线------------");
    System.out.println("-----------分割线------------");
    System.out.println("-----------分割线------------");
    doPost();
  }
}

CloseableHttpClient

使用httpclient.jar,maven依赖如下:

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

java示例代码如下:

package com.example.study.demo.http;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

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

/**
 * CloseableHttpClient使用示例
 * jar包:httpclient.jar
 */
public class CloseableHttpClientTest {

  public static void doGet() {
    CloseableHttpClient client = HttpClientBuilder.create().build();
    HttpGet get = new HttpGet("http://www.thepaper.cn");
    try {
      // 很奇怪,使用CloseableHttpClient来请求澎湃新闻的首页,GTE请求也必须加上下面这个Header,但是使用HTTPClient则不需要
      get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
      HttpResponse response = client.execute(get);
      String res = EntityUtils.toString(response.getEntity());
      System.out.println(res);
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  public static void doPost() {
    CloseableHttpClient client = HttpClientBuilder.create().build();
    HttpPost post = new HttpPost("https://www.thepaper.cn/www/commentPraise.msp");
    try {
      post.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.81 Safari/537.36");
      List<NameValuePair> params = new ArrayList<>();
      params.add(new BasicNameValuePair("commentId", "18718372"));
      post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));
      HttpResponse response = client.execute(post);
      String res = EntityUtils.toString(response.getEntity());
      System.out.println(res);
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    } catch (ClientProtocolException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }


  public static void main(String[] args) {
    doGet();
    System.out.println("-----------分割线------------");
    System.out.println("-----------分割线------------");
    System.out.println("-----------分割线------------");
    doPost();

  }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/127056.html原文链接:https://javaforall.net

(1)
上一篇 2022年4月9日 上午11:00
下一篇 2022年4月9日 上午11:00


相关推荐

  • Cursor Figma MCP 完整使用教程

    Cursor Figma MCP 完整使用教程

    2026年3月16日
    2
  • vue中使用animate css

    vue中使用animate cssvue2使用animatecss安装安装的方式有很多种1.在html文件中直接引用从github上下载的资源&lt;linkrel="stylesheet"href="vue2-animate.min.css"&gt;2.如果使用webpack并且用对了css-loader可以使用npm安装npm安装包依赖npminstall–savevue2-animate3…

    2022年7月27日
    10
  • java中static关键字的作用_Java:Java中static关键字作用

    java中static关键字的作用_Java:Java中static关键字作用static关键字最基本的用法是:1、被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来2、被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个类来3、被static修饰的变量、被static修饰的方法统一属于类的静态资源,是类实例之间共享的。@JDK把不同的静态资源放在了不同的类中为什么不把所有静态资源放在一个类里面呢?…

    2022年7月8日
    19
  • 【MySQL】explain 用法详解

    【MySQL】explain 用法详解MySQL explain 用法详解 explain 命令主要来查看 SQL 语句的执行计划 查看该 SQL 语句有没有使用索引 有没有做全表扫描等 它可以模拟优化器执行 SQL 查询语句 从而知道 MySQL 是如何处理用户的 SQL 语句 文章目录 MySQL explain 用法详解一 explain 能干什么二 如何使用 explain 三 explain 各字段的含义 3 1id3 2select type3 3table3 4type3 5possible keys3 6key3 7key len3 8

    2026年3月18日
    2
  • bufferedwriter类_flatfileitemreader

    bufferedwriter类_flatfileitemreader如果单独使用FileWriter也可以。上面这个加了一个缓冲,缓冲写满后在将数据写入硬盘。你每写一个数据,硬盘就有一个写动作,性能极差。BufferedWriter是修饰者。FileWriter是被修饰者。这里有一个”修饰类”的概念。这样做极大的提高了性能。…

    2025年7月16日
    7
  • Pycharm运行程序的时候弹出“Edit configuration”窗口解决方法

    Pycharm运行程序的时候弹出“Edit configuration”窗口解决方法Pycharm 运行程序的时候弹出 Editconfigur 窗口解决方法小白第一次使用 pycharm 编程 win10 Run 工程的时候弹出如下窗口 要求进行设置 不知所措 于是查了之后发现问题所在 新建工程后未给其指定解释器 解决办法如下

    2026年3月26日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号