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 相关使用介绍的更多相关文章

  1. Android 6.0删除Apache HttpClient相关类的解决方法

    相应的官方文档如下: 上面文档的大致意思是,在Android 6.0(API 23)中,Google已经移除了Apache HttpClient相关的类,推荐使用HttpUrlConnection. ...

  2. opensslBIO系列之2---BIO结构和BIO相关文件介绍

    BIO结构和BIO相关文件介绍     (作者:DragonKing Mail:wzhah@263.net 公布于:http://gdwzh.126.com openssl专业论坛)          ...

  3. Oracle 参数文件及相关操作介绍

    Oracle 参数文件及相关操作介绍 by:授客 QQ:1033553122 1.服务器参数文件 服务器参数文件是一个二进制文件,作为初始化参数的存储仓库.实例运行时,可用ALTER SYSTEM来改 ...

  4. MySQL各类日志文件相关变量介绍

    文章转自:http://www.ywnds.com/?p=3721 MySQL各类日志文件相关变量介绍 查询所有日志的变量   1 mysql> show global variables li ...

  5. MyEclipse相关用法介绍

    MyEclipse相关用法介绍 ================================================================================ 编辑: ...

  6. TMF SID性能相关实体介绍

    TMF SID性能相关实体介绍 Copyright © TeleManagement Forum 2013. All Rights Reserved. This document and transl ...

  7. PySpark SQL 相关知识介绍

    title: PySpark SQL 相关知识介绍 summary: 关键词:大数据 Hadoop Hive Pig Kafka Spark PySpark SQL 集群管理器 PostgreSQL ...

  8. 采样方法(二)MCMC相关算法介绍及代码实现

    采样方法(二)MCMC相关算法介绍及代码实现 2017-12-30 15:32:14 Dark_Scope 阅读数 10509更多 分类专栏: 机器学习   版权声明:本文为博主原创文章,遵循CC 4 ...

  9. CPU发展史和相关品牌介绍

    CPU发展史和相关品牌介绍 CPU发展已经有40多年的历史了.我们通常将其分成 六个阶段. (1)第一阶段 (1971年-1973年) .这是4位和8位低档微处理器时代,代表产品是Intel 4004 ...

随机推荐

  1. 20145310 Exp8 Web基础

    实验问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能. 表单是一个包含表单元素的区域,表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素. 表单的三个基 ...

  2. 20145329 《网络对抗技术》MSF基础应用

    实践目标 掌握metasploit的基本应用方式,掌握常用的三种攻击方式的思路.具体需要完成(1)一个主动攻击,如ms08_067;(2)一个针对浏览器的攻击,如ms11_050:(3)一个针对客户端 ...

  3. [VS 2015] VS2015 完整ISO镜像包

    区别 :https://www.visualstudio.com/zh-cn/products/compare-visual-studio-2015-products-vs 完整ISO镜像:下载 VS ...

  4. Go第七篇之规范的接口

    接口本身是调用方和实现方均需要遵守的一种协议,大家按照统一的方法命名参数类型和数量来协调逻辑处理的过程. Go 语言中使用组合实现对象特性的描述.对象的内部使用结构体内嵌组合对象应该具有的特性,对外通 ...

  5. 怎样用QtCreator编辑运行python脚本

    QtCreator作为一款开发基于qt库的程序.以及开发C语言.c++语言项目都是一个利器,轻便好用.那么作为开发者来说,经常换着使用各种IDE是家常便饭,但是要是这些语言都能够集成到一个工具里岂不是 ...

  6. NS3 一个小问题

    可能会在执行./waf 命令的时候遇到这个问题,比如我想编译 /home/wasdns/Documents/NS3/ns-3.17/scratch 目录下的一个文件:newnsthree.cpp 编译 ...

  7. Web前端代码规范

    新增:http://materliu.github.io/code-guide/#project-naming HTML 原则1.规范 .保证您的代码规范,保证结构表现行为相互分离.2.简洁.保证代码 ...

  8. Python四大主流网络编程框架

    目前的4种主流Python网络框架:Django.Tornado.Flask.Twisted.

  9. 实训10a--用数据值填充下拉列表

    1.新建mvc4项目,选择基本模板. (1)点击“开始->所有程序->Microsoft Visual Studio 2012->Visual Studio 2012”菜单,打开Vi ...

  10. 《图解Http》 10,11章:构建Web的技术, Web的攻击技术

    10.2动态HTML 通过调用客户端脚本语言js,实现对web页面的动态改造.利用DOM文档对象模型,指定想发生变化的元素. 10.22 更容易控制的DOM 使用DOM可以将HTML内的元素当作对象操 ...