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 ...
随机推荐
- USB/232/485/TTL/CMOS(串口通信)⭐⭐⭐
1.USB:电脑的USB口信号时USB信号,为差分信号,电压范围:+400mV~-400mV间变化:直流电压5V 驱动电流500MA 2.232电平: 逻辑1(MARK)=-3V--15V 逻辑0(S ...
- boot sector FAT
- c++类定义代码的分离
类文件 实际工程中,对一个类的说明.架构.描述方法是: 往往分成头文件和实现的源文件,来实现代码的分离 然后,源文件中包含类的头文件... 头文件的包含问题: 类对应的实现文件cpp.main主 ...
- 记录Java中对url中的参数进行编码
Code: import java.net.URLEncoder; import java.util.HashMap; import java.util.Iterator; import java.u ...
- HDU 1823 Luck and Love (二维线段树&区间最值)题解
思路: 树套树,先维护x树,再维护y树,多练练应该就能懂了 代码: #include<cstdio> #include<cmath> #include<cstring&g ...
- 【Coursera】Third Week(2)
拾遗 Steve Jobs与World Wide Web 如果你有仔细观察Robert Cailliau的视频的话,你会发现他工作所用的电脑为NeXT电脑. Jobs 也对web 产生了一定的影响,众 ...
- UVa 11093 环形跑道(模拟)
https://vjudge.net/problem/UVA-11093 题意:环形跑道上有n个加油站,编号为1~n.第i个加油站可以加油pi加仑,从加油站i开到下一站需要qi加仑汽油.输出最小的起点 ...
- mysql 存储过程简单实例
一.什么是存储过程 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程 ...
- Unity3d 常用的方法
1.创建物体 2.加载物体 3.寻找物体 4.添加脚本 1.创建物体 GameObject go; // Use this for initialization void Start () { go ...
- 获取CheckBox的值
前台获取 function chkCheckBox() { var code_arr = new Array(); //定义一数组 $('.C_B').each(function () { if ($ ...