HTTPClient和CloseableHttpClient

使用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"; // 澎湃新闻评论点赞urlHttpClient client = new HttpClient();PostMethod postMethod = new PostMethod(praiseUrl);// 必须设置下面这个HeaderpostMethod.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();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555076.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发 数组里面的字典_Redis字典结构与rehash解读

关注公众号&#xff1a;后端技术漫谈&#xff0c;技术之路不迷路~字典是一种用于保存键值对的抽象数据结构&#xff0c;也被称为查找表、映射或关联表。在字典中&#xff0c;一个键(key)可以和一个值(value)进行关联&#xff0c;这些关联的键和值就称之为键值对。抽象数据结构&…

MyBatisPlus 学习笔记_MP的AR模式

狂神说 MyBatisPlus 学习笔记 一、快速入门 文档&#xff1a;https://mp.baomidou.com/ 使用第三方组件&#xff1a; 导入对应依赖研究依赖如何配置代码如何编写提高扩展技术能力 步骤&#xff1a; 1、创建数据库 mybatis_plus 2、创建user表 DROP TABLE IF EXISTS user;CREATE…

ajax调用java程序,从微信小程序到鸿蒙JS开发-JS调用Java

除轻量级智能穿戴设备&#xff0c;现鸿蒙支持的手机、汽车、TV、手表、平板等属于富鸿蒙&#xff0c;在JS语言的项目中也有Java模块&#xff0c;并提供了JS跨语言调用Java方法的技术。现需要实现查看商品评论时&#xff0c;统计出长评、中评和短评的比例&#xff0c;这里将评论…

文本删除空行_010 Editor for mac(文本和十六进制编辑器)

为大家带来最新版本的010 Editor for mac&#xff0c;这是一款专业的文本和十六进制编辑器&#xff0c;新版本的010 editor mac版包含了语法突出显示、更多字符集支持、添加了删除行和删除空行命令等新功能&#xff0c;另外修复了各种错误&#xff0c;功能更加全面。010editor …

Mybatis-Plus之四种lambda方式LambdaQueryWrapper,QueryWrapper<实体>().lambda(),LambdaQueryChainWrapper<实体>

Mybatis-Plus之四种lambda方式 lambda四种表达形式 前言 使用了lambda表达式 可以通过方法引用的方式来使用实体字段名的操作&#xff0c;避免直接写数据库表字段名时的错写名字&#xff1b; 一、LambdaQueryWrapper<> /*** lambda 条件构造器* 生成的sql语句 SELECT…

sql怎么修改服务器角色,sql角色服务器的设置

sql角色服务器的设置 内容精选换一换如果您需要对华为云上购买的DDM资源&#xff0c;为企业中的员工设置不同的访问权限&#xff0c;为达到不同员工之间的权限隔离&#xff0c;您可以使用统一身份认证服务(Identity and Access Management&#xff0c;简称IAM)进行精细的权限管…

ecshop根目录调用_ECSHOP各文件夹功能说明

ECSHOP各文件夹功能说明1、根目录&#xff1a;前台程序文件2、admin&#xff1a;后台程序文件夹--根目录&#xff1a;后台程序文件*.php文件--help\zh_cn&#xff1a;各功能的帮助文件*.xml文件--images&#xff1a;后台页面用图片--includes&#xff1a;后台公用文件和函数--j…

MybatisPlus——selectPage

没mybatisPlus坐标的可以导一下 <!--mybatis-plus的springboot支持--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version></dependency>select…

MyBatis-Plus——字段类型处理器TypeHandler

字段类型处理器&#xff08;TypeHandler&#xff09; 1&#xff0c;准备工作 &#xff08;1&#xff09;MyBatis 中的 TypeHandler 类型处理器用于 JavaType 与 JdbcType 之间的转换&#xff0c;假设我们用户表中有一个联系方式字段&#xff0c;类型为字符串&#xff1a; &am…

额外参数_Pytorch获取模型参数情况的方法

分享人工智能技术干货&#xff0c;专注深度学习与计算机视觉领域&#xff01;相较于Tensorflow&#xff0c;Pytorch一开始就是以动态图构建神经网络图的&#xff0c;其获取模型参数的方法也比较容易&#xff0c;既可以根据其内建接口自己写代码获取模型参数情况&#xff0c;也可…

Mybatis-Plus之逻辑删除

概念 什么是逻辑删除 逻辑删除:假删除。将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录。 数据库实现思路:插入数据时,标记为未删除状态;查询、修改时,只获取未删除状态的数据进行操作;删除时则更新删除状态为已删除…

查看分支编码_MySQL分支数据库MariaDB之CentOS安装教程

MariaDB数据库管理系统是MySQL的一个分支&#xff0c;由MySQL的创始人Michael Widenius主持开发。采用GPL授权许可 MariaDB的目的是完全兼容MySQL&#xff0c;包括API和命令行&#xff0c;在存储引擎方面&#xff0c;使用XtraDB(英语&#xff1a;XtraDB)来代替MySQL的InnoDB。1…

关联规则算法c语言样例及分析_推荐系统总结系列-关联规则算法(四)

基于关联规则的推荐有三种方法&#xff1a;Apriori关联规则算法FP Tree关联规则算法&#xff1b;PrefixSpan关联规则算法&#xff1b;关联规则挖掘推荐算法&#xff1a;关联规则挖掘是一种在大规模交易中识别类似规则关系模式的通用技术&#xff0c;可以应用到推荐系统中。交易…

perclos嘴巴_一种基于视频分析的疲劳状态检测方法及装置与流程

本发明涉及疲劳检测领域&#xff0c;特别是涉及一种基于视频分析的疲劳状态综合检测方法及装置。背景技术&#xff1a;疲劳状态检测技术在交通运输、生产安全、教育培训等许多领域应用广泛。目前&#xff0c;疲劳状态检测的方法一般可分为接触式和非接触式两大类。其中&#xf…

Mybatis-Plus条件

Mybatis-Plus条件 条件构造器 说明: 以下出现的第一个入参boolean condition表示该条件是否加入最后生成的sql中没有标明condition的方法,默认为true以下出现的泛型Param均为Wrapper的子类实例(均具有AbstractWrapper的所有方法)以下方法在入参中出现的R为泛型,在普通wrapper中…

Mysql - Innodb锁、事务与隔离级别

我们的数据库一般都会并发执行多个事务&#xff0c;多个事务可能会并发的对相同的一批数据进行增删改查操作&#xff0c;可能就会导致脏写、脏读、不可重复读、幻读这些问题。 这些问题的本质都是数据库的多事务并发问题&#xff0c;为了解决多事务并发问题&#xff0c;数据库…

东南西北十字图_word画东南西北方向图标 怎么在Word里绘制方向十字图标

如果你使用的是2007版的话&#xff0c;可以在插入选项中找到插入图形选项&#xff0c;里面有一个箭头总汇&#xff0c;选择你所需要的就行了&#xff01;如果是2003版的话&#xff0c;也可以在插入选项中找到图形&#xff0c;里面也有这一项&#xff01;怎么样在word07文档里键…

语言非递归求解树的高度_算法素颜(11):无死角“盘”它!二分查找树

引言《菜鸟也能“种”好二叉树&#xff01;》一文中提到了&#xff1a;为了方便查找&#xff0c;需要进行分层分类整理。而满足这种目标的数据结构之一就是树。树的叶子节点可以看作是最终要搜寻的目标物&#xff1b;叶子节点以上的每一层&#xff0c;都可以看作是一个大类别、…

Mysql InnoDB存储引擎的锁相关

Mysql InnoDB存储引擎的锁相关 InnoDB下&#xff0c;mysql四个级别隔离下加锁操作 四个级别隔离的写操作都加X锁串行化下读加S锁select … for update, select … lock in share mode 分别加x锁&#xff0c;s锁在需要加锁的场景下&#xff0c;会根据情况使用三种加锁策略&…

安装python37路径报错_Robot framework安装python3.7导入HttpLibrary.HTTP报错

报错信息&#xff1a;20200106 18:23:28.178 [WARN]: Importing test library "HttpLibrary.HTTP" failedTraceback (most recent call last):Importing test library HttpLibrary.HTTP failed: SyntaxError: invalid syntax (__init__.py, line 16)Traceback (most …