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();

  }
}

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(1)


相关推荐

  • Error:Could not find com.android.support.constraint:constraint-layout:1.0.2.

    Error:Could not find com.android.support.constraint:constraint-layout:1.0.2.

  • Vue3快速入门教程「建议收藏」

    Vue3快速入门教程「建议收藏」DataProperty模板在<>内的,属于HTMLattribute普通的Mustache语法:双大括号->{{number}}的文本v-bind和v-on的使用创建vm实例时对常用的几个钩子函数的使用方法created(){}mounted(){}以下示例:每秒改变1次msg<!DOCTYPEhtml><htmllang=”en”><head><metacharset=”U..

  • ssm框架过时了吗_ssm和mvc框架

    ssm框架过时了吗_ssm和mvc框架日志如果一个数据库操作,出现了异常,我们需要排错,日志就是最好的助手曾经:sout,debug现在:日志工厂掌握STDOUT_LOGGINGLOG4Jlog4j什么是Log4j?我们可以控制日志信息输送的目的地是控制台我们也可以控制每一条日志的输出格式通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。分页减少数据量selsect * from user limit startIndex,pageS

  • docker下载安装教程_安卓安装docker

    docker下载安装教程_安卓安装docker前言Docker提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个D

  • 卸载Symantec Endpoint Protection, 无需密码的卸载方法

    卸载Symantec Endpoint Protection, 无需密码的卸载方法最近一次偶然的机会,被人装了个Symantec在电脑上,搞得各种报警,验证,烦死.然后就自然而然的想卸载掉这个该死的杀毒软件,没想到这个杀毒软件居然还是个流氓杀毒软件,卸

  • 安防监控项目(Remeo)概要设计

    安防监控项目(Remeo)概要设计1. 项目背景随着人们在家居生活中使用的电器越来越多,由此带来的安全隐患也有了明显的增多。为了降低电器的不合理使用带来的异常情况,大众对家庭智能监控的需求也越来越高。家庭智能监控主要依托摄像头,温湿度传感器等设备实现实时监控和智能报警的功能。RomeoMonitor主要是为模拟是家庭安防监控的简易系统。主要基于温湿度传感器、运动传感器和摄像头、蜂鸣器、LED等硬件作为终端,基于TCP和zig…

发表回复

您的电子邮箱地址不会被公开。

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