教授通过代码示例学习Commons HTTPClient4组件的编程技术——利用HttpClient实现对Cookie操作

httpclient4  时间:2021-01-29  阅读:()

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

目录

1.1 利用HttpC lient实现对Cookie操作. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

1.1.1 Cookie接口和对应的实现类BasicClientCookie. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .2

1.1.2 Cookie持久化实现的应用示例. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .3

杨教授工作室版权所有盗版必究 1/8页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1. 1 利用HttpClient实现对Cookie操作

1. 1. 1 Cookie接口和对应的实现类BasicClientCookie

1、 org.apache.http.cookie.Cookie接口的主要功能

HttpClient使用Cookie接口来代表一个抽象的Cookie标志用简单的形式一个HTTPCookie仅仅是一个键值对。通常一个HTTP Cookie也包括许多属性例如版本有效的域名 Cookie向源服务器申请的明确的URL子集路径和最大的有效期。

2、 org.apache.http. impl.cookie.BasicClientCookie实现类的构造方法

BasicClientCookie(String name, String value)

其中的参数含义为

 name - the cookie name

 value - the cookie value

3、 Cookie管理规范

1 CookieSpec接口代表一个cookie管理规范 cookie管理规范强制要求如下

 解析set-cooke和可选的set-cookie2头部的规则

 解析cookie验证规则

 对于主机端口和原始路径的cookie头部规格。

2 HttpClient有几个CookieSpec实现由CookiePolicy接口定义

 Netscape草稿 该规范遵从原Netscape通信发布的原始草稿规范 它应该避免

除非对遗留代码兼容性绝对需要。

 RFC 2109官方HTTP状态管理规范的旧版本被RFC 2965取代。

 RFC 2965官方HTTP状态管理规范。

 浏览器兼容这个实现努力去精密的模仿常见的WEB浏览器应用程序 比如IE

和火狐。

 最好的匹配 'Meta'cookie明确说出获得一个cookie规则依据Http响应发送的cookie

格式它基本上把所有的应用积聚到一个类中。

3强烈推荐使用最好匹配策略让HttpClient在运行时依据执行上下文获取适当的遵从级别。

杨教授工作室版权所有盗版必究 2/8页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1. 1.2 Cookie持久化实现的应用示例

HTTpClient4组件利用CookieStore接口从事持久化Cookie 的工作缺省的CookieStore实现类为BasicCookieStore。

4、在项目中添加一个HttpC lientC ook ie类

1类名称为HttpClientCookie包名称为com.px1987.httpclient

杨教授工作室版权所有盗版必究 3/8页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

2编程该HttpClientCookie类package com.px1987.httpclient;import java. io. IOException;import java.util.Date;import java.util. Iterator;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.params.ClientPNames;import org.apache.http. client.params.CookiePolicy;import org.apache.http.cookie.Cookie;import org.apache.http. impl.client.BasicCookieStore;import org.apache.http. impl.client.DefaultHttpClient;import org.apache.http. impl.cookie.BasicClientCookie;import org.apache.http.util.EntityUtils;public class HttpClientCookie {public HttpClientCookie() throws ClientProtocolException, IOException {

DefaultHttpClient httpClient = new DefaultHttpClient() ; //创建一个客户端类似打开一个浏览器

//httpParams. setParameter(ClientPNames.COOKIE_POLICY,

CookiePolicy.BROWSER_COMPATIBILITY) ;httpParams. setParameter(ClientPNames.COOKIE_POLICY,

CookiePolicy.BEST_MATCH) ;

//表示java client将按照浏览器的方式来自动处理CookiewriteCookieByHttpClient(httpClient) ;sendRequestToServer(httpClient) ;

杨教授工作室版权所有盗版必究 4/8页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料httpClient.getConnectionManager() . shutdown() ; ;//释放连接

}public void writeCookieByHttpClient(DefaultHttpClient httpClient) throwsClientProtocolException, IOException {

BasicClientCookie oneCookie =new

BasicClientCookie("someOneCookieKey", "someOneCookieValue") ;oneCookie. setPath("/") ; //设置当前容器中的所有页面都可以访问到该Cookie

// oneCookie. setDomain(".px1987.com") ;oneCookie. setExpiryDate(new Date(System.currentTimeMillis()+60*60*1000) ) ; //设置cookie的有效时间为1小时

BasicClientCookie twoCookie =new

BasicClientCookie("someTwoCookieKey", "01234567890") ;twoCookie. setPath("/") ; //设置当前容器中的所有页面都可以访问到该Cookie

// twoCookie. setDomain(".px1987.com") ;twoCookie. setExpiryDate(new Date(System.currentTimeMillis()+60*60*1000) ) ; //设置cookie的有效时间为1小时

Cookie[] allCookies=new Cookie[] {oneCookie, twoCookie} ;

BasicCookieStore cookies =new BasicCookieStore() ;cookies.addCookies(allCookies) ;httpClient. setCookieStore(cookies) ;

}public void sendRequestToServer(DefaultHttpClient httpClient)throws ClientProtocolException, IOException {

HttpGet oneGetMethod = newHttpGet("http://localhost:8080/webbank/index. jsp") ;

HttpResponse httpResponse =httpClient. execute(oneGetMethod) ;

杨教授工作室版权所有盗版必究 5/8页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料int httpStatusCode=httpResponse.getStatusLine() .getStatusCode() ;if(httpStatusCode==HttpStatus.SC_OK) {

System.out.println(httpResponse.getStatusLine() ) ;//打印服务器返回的状态

HttpEntity entity = httpResponse.getEntity() ;if (entity != null) {

System.out.println(EntityUtils. toString(entity) ) ; //打印返回的信息entity.consumeContent() ; //确保资源释放

}readCookieByHttpClient(httpClient) ;

}else{

System.out.println("方法执行过程中出现了错误") ;//打印服务器返回的状态

}oneGetMethod.abort() ; //结束本次请求

}public void readCookieByHttpClient(DefaultHttpClient httpClient)throws ClientProtocolException, IOException {

List<Cookie> allCookies = httpClient.getCookieStore() .getCookies() ;if (allCookies. isEmpty() ) {

System.out.println("没有获得目标Cookie对象中的数据") ;return;

}

Iterator<Cookie> allCookiesItem=allCookies. iterator() ;while(allCookiesItem.hasNext() ) {

Cookie someOneCookie=(Cookie)allCookiesItem.next() ;if(someOneCookie.getName() .equalsIgnoreCase("someOneCookieKey") ) {

System.out.println("名称为someOneCookieKey的数据项目为 "+

杨教授工作室版权所有盗版必究 6/8页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料someOneCookie.getValue() ) ;

}elseif(someOneCookie.getName() .equalsIgnoreCase("someTwoCookieKey") ) {

System.out.println("名称为someTwoCookieKey的数据项目为 "+someOneCookie.getValue() ) ;

}

}

}public static void main(String[] args) throws ClientProtocolException,IOException {

HttpClientCookie oneWebBankAppclient=new HttpClientCookie() ;

}

}

3执行该程序后的结果如下

5、关于HttpC lient4警告信息“Invalid cookie header”的问题解决

1如果出现如下警告信息org.apache.http.client.protocol.ResponseProcessCookies processCookies

警 告 : Invalid cookie header: "set-cookie:ld=ApO1Byllll23mj1xlllll9$cay9lllllT$PxWyllll9lllllVklll5@@@@@@@@@@; path=/;

杨教授工作室版权所有盗版必究 7/8页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料expires=Thu, 22 Oct 2013 01:48:49 GMT; domain=. shanhe114.com". Unable to parseexpires attribute: Thu, 22 Oct 2013 01 :48:49 GMT

2解决的方法

HttpClient httpClient = new DefaultHttpClient() ;

HttpClientParams. setCookiePolicy(httpClient.getParams() ,

CookiePolicy.BROWSER_COMPATIBILITY) ;

杨教授工作室版权所有盗版必究 8/8页

cyun29元/月,香港CN2 GIA云服务器低至起;香港多ip站群云服务器4核4G

cyun怎么样?cyun蓝米数据是一家(香港)藍米數據有限公司旗下品牌,蓝米云、蓝米主机等同属于该公司品牌。CYUN全系列云产品采用KVM架构,SSD磁盘阵列,优化线路,低延迟,高稳定。目前,cyun推出的香港云服务器性价比超高,香港cn2 gia云服务器,1核1G1M/系统盘+20G数据盘,低至29元/月起;香港多ip站群云服务器,16个ip/4核4G仅220元/月起,希望买香港站群服务器的站长...

Vinahost - 越南VPS主机商月6美元 季付以上赠送时长最多半年

Vinahost,这个主机商还是第一次介绍到,翻看商家的介绍信息,是一家成立于2008年的老牌越南主机商,业务涵盖网站设计、域名、SSL证书、电子邮箱、虚拟主机、越南VPS、云计算、越南服务器出租以及设备托管等,机房主要在越南胡志明市的Viettle和VNPT数据中心,其中VNPT数据中心对于国内是三网直连,速度优。类似很多海外主机商一样,希望拓展自己的业务,必须要降价优惠或者增加机房迎合需求用户...

Sharktech($49/月),10G端口 32GB内存,鲨鱼机房新用户赠送$50

Sharktech 鲨鱼机房商家我们是不是算比较熟悉的,因为有很多的服务商渠道的高防服务器都是拿他们家的机器然后部署高防VPS主机的,不过这几年Sharktech商家有自己直接销售云服务器产品,比如看到有新增公有云主机有促销活动,一般有人可能买回去自己搭建虚拟主机拆分销售的,有的也是自用的。有看到不少网友在分享到鲨鱼机房商家促销活动期间,有赠送开通公有云主机$50,可以购买最低配置的,$49/月的...

httpclient4为你推荐
笔记本内存价格笔记本内存条多少钱?985和211哪个好985大学好 还是211是什么意思华为p40和mate30哪个好mate30 5G和p40 5G有什么区别?浮动利率和固定利率哪个好房贷利率是固定的还是浮动的好?核芯显卡与独立显卡哪个好独立显卡和核心显卡哪个好电陶炉和电磁炉哪个好电磁炉和电陶炉买哪个?手机浏览器哪个好用手机用哪个浏览器好一点红茶和绿茶哪个好红茶和绿茶哪个更好?qq空间登录电脑手机怎么登qq空间电脑版?360云盘网页版登陆360密盘怎么登陆
fc2最新域名 187邮箱 瓦工 腾讯云数据库 gomezpeer 日本空间 湖南服务器托管 qq云端 最好的qq空间 免费dns解析 服务器监测 上海联通宽带测速 多线空间 电信托管 最漂亮的qq空间 华为云盘 789 服务器论坛 浙江服务器 阿里云邮箱登陆 更多