httpclient 相关使用介绍
httpclient中sessionId的获取与设置
public class HttpSessionId {
public static void main(String[] args) throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
String urlStr = "http://baidu.com";
HttpPost post = new HttpPost(urlStr);
HttpResponse response = client.execute(post);
StatusLine statusLine = response.getStatusLine();
String respon = null;
int statuscode = statusLine.getStatusCode();
if (statuscode == 200) {
CookieStore cookieStore = ((AbstractHttpClient) client).getCookieStore();
List<Cookie> cookies = cookieStore.getCookies();
for (Cookie ck : cookies) {
if ("JESSIONID".equals(ck.getName())) {
String sessionId = ck.getValue();
break;
}
}
}
}
}
hc_post参数
json串形式StringEntity
StringEntity stringEntity = new StringEntity(tojson.toJson());
stringEntity.setContentType("text/json");
stringEntity.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,"application/json"));
httpPost.setEntity(entity);
参数形式HttpEntity
List<NameValuePair> params = new ArrayList<>();
params.add(new NameValuePair("name","ssgao"));
params.add(new NameValuePair("age","30"));
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(params,"utf-8");
HttpPost post = new HttpPost("http://127.0.0.1/handle.do");
post.setEntity(entity);
上传文件MultiPartEntity
MultipartEntity entity = new MultipartEntity();
entity.addPart("param1",new StringBody("ssgao",Charset.forName("utf-8")));
entity.addPart("param2",new StringBody("shuoailin",Charset.forName("utf-8")));
entity.addPart("param3",new FileBody(new File("c:\1.txt"))));
request.setEntity(entity);
httpclient超时时间设置
***httpclient内部有三个超时时间设置 ***
连接池获取可用连接超时
连接超时
读取数据超时
不设置超时时间
如果不设置超时时间一旦服务器无响应的情况,如果返回404,50x错误还好,如果没有没有返回,java线程会一直阻塞等待
public class HttpTimeDemo {
public static void main(String[] args) {
RequestConfig requestConfig = RequestConfig.custom()
.setConnectionRequestTimeout(1000) //从连接池中获取连接的超时时间
.setConnectTimeout(1000) //与服务器连接超时时间,httpclient会创建一个异步线程用以创建socket连接
.setSocketTimeout(1000) //socket读取数据超时时间,从服务器获取响应数据的超时时间
.build();
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setMaxConnTotal(100) //连接池中最大连接数
.setMaxConnPerRoute(50) //分配给同一个route(路由)最大的并发连接数
.setDefaultRequestConfig(requestConfig)
.build();
/**
* route: 运行环境机器 到 目标机器的一条线路
* 举例: 我们使用httpclient来分别请求 www.baidu.com的资源和 www.bing.com的资源,那么它就会产生两个route
*/
}
}
使用httpParam设置超时时间
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, Config.20000);//连接时间20s
httpclient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 60000);//数据传输时间60s
链接超时
httpclient.getHttpConnectionManager().getParams().setConnectionTimeout(60000);
读取超时
httpClient.getHttpConnectionManager().getParams().setSoTimeot(60000)
三个超时时间详解
'从连接池中获取可用连接超时'
httpclient中的要用连接时尝试从连接池中获取,若是在等待了一定时间后还没有获取到可用连接(比如连接池中没有空闲连接)
'连接目标超时connectionTimeout'
指的是连接目标url的连接超时时间,即客户端发送请求到目标url建立连接的最大时间。
如果在该时间范围内还没有建立连接,抛出异常
'等待响应超时(读取超时)socketTimeout'
连接上一个url后,获取response的返回等待时间,即在于目标url建立连接后,等待放回response的最大时间,在规定时间没有
返回响应的话就抛出SocketTimeout
测试sockettimeout
本地开启一个url http://localhost:8080/firstTime?method=test
这个测试url中,当访问这个链接时,线程sleep一段时间,来模拟返回response时间
@RequestMapping(params = "method=test")
public String testMethod(ModelMap model) {
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("call testMethod method.");
model.addAttribute("name", "test method");
return "test";
}
将读取response返回超时时间设的时间比那个sleep时间短之后,运行程序给出异常
java.net.SocketTimeoutException:Read timed out
httpclient 相关使用介绍的更多相关文章
- Android 6.0删除Apache HttpClient相关类的解决方法
相应的官方文档如下: 上面文档的大致意思是,在Android 6.0(API 23)中,Google已经移除了Apache HttpClient相关的类,推荐使用HttpUrlConnection. ...
- opensslBIO系列之2---BIO结构和BIO相关文件介绍
BIO结构和BIO相关文件介绍 (作者:DragonKing Mail:wzhah@263.net 公布于:http://gdwzh.126.com openssl专业论坛) ...
- Oracle 参数文件及相关操作介绍
Oracle 参数文件及相关操作介绍 by:授客 QQ:1033553122 1.服务器参数文件 服务器参数文件是一个二进制文件,作为初始化参数的存储仓库.实例运行时,可用ALTER SYSTEM来改 ...
- MySQL各类日志文件相关变量介绍
文章转自:http://www.ywnds.com/?p=3721 MySQL各类日志文件相关变量介绍 查询所有日志的变量 1 mysql> show global variables li ...
- MyEclipse相关用法介绍
MyEclipse相关用法介绍 ================================================================================ 编辑: ...
- TMF SID性能相关实体介绍
TMF SID性能相关实体介绍 Copyright © TeleManagement Forum 2013. All Rights Reserved. This document and transl ...
- PySpark SQL 相关知识介绍
title: PySpark SQL 相关知识介绍 summary: 关键词:大数据 Hadoop Hive Pig Kafka Spark PySpark SQL 集群管理器 PostgreSQL ...
- 采样方法(二)MCMC相关算法介绍及代码实现
采样方法(二)MCMC相关算法介绍及代码实现 2017-12-30 15:32:14 Dark_Scope 阅读数 10509更多 分类专栏: 机器学习 版权声明:本文为博主原创文章,遵循CC 4 ...
- CPU发展史和相关品牌介绍
CPU发展史和相关品牌介绍 CPU发展已经有40多年的历史了.我们通常将其分成 六个阶段. (1)第一阶段 (1971年-1973年) .这是4位和8位低档微处理器时代,代表产品是Intel 4004 ...
随机推荐
- scp命令在linux间传送文件的方法
当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码. 把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 ...
- MFC、Qt、C#跨线程调用对象
MFC.Qt.C#都是面向对象的编程库 1.MFC不允许跨线程调用对象,即线程只能调用它本身分配了空间的对象 In a multi-threaded application written using ...
- STM32定时器的预装载寄存器与影子寄存器之间的关系【转】
首先转载: STM32定时器的预装载寄存器与影子寄存器之间的关系 本文的说明依据STM32参考手册(RM0008)第10版:英文:http://www.st.com/stonline/produc ...
- 怎样用QtCreator编辑运行python脚本
QtCreator作为一款开发基于qt库的程序.以及开发C语言.c++语言项目都是一个利器,轻便好用.那么作为开发者来说,经常换着使用各种IDE是家常便饭,但是要是这些语言都能够集成到一个工具里岂不是 ...
- Git 基础 —— 常用命令
Git 基础学习系列 Git 基础 -- 安装 配置 别名 对象 Git 基础 -- 常用命令 Git 基础 -- 常见使用场景 Git基础 -- Github 的使用 git init 创建 Git ...
- ubuntu查询某个库的相关情况
环境:Ubuntu 14.04 64bit 1.如:查询libjpeg库的位置 ldconfig -p |grep libjpeg 2.如:查询libjpeg库的相关名称 dpkg -l '*jpeg ...
- 【错误解决】SVN常见错误及解决方式
1.Error while creating module:org.apache.subversion.javahl.ClientException:Authorization failed svn: ...
- BZOJ4401: 块的计数 思维题
Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...
- [BZOJ1122][POI2008]账本BBB 单调队列+后缀和
Description 一个长度为n的记账单,+表示存¥1,-表示取¥1.现在发现记账单有问题.一开始本来已经存了¥p,并且知道最后账户上还有¥q.你要把记账单修改正确,使得 1:账户永远不会出现负数 ...
- 非[无]root权限 服务器 下安装perl以及perl模块
转载自http://www.zilhua.com 在本博客中,所有的软件安装都在服务器上,且无root权限.理论上适合所有的用户. 我的安装目录 cd /home/zilhua/software 1. ...