杨教授工作室精心创作的优秀程序员职业提升必读系列资料
目录
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页
老鹰主机HawkHost是个人比较喜欢的海外主机商,如果没有记错的话,大约2012年左右的时候算是比较早提供支付宝付款的主机商。当然这个主机商成立时间更早一些的,由于早期提供支付宝付款后,所以受众用户比较青睐,要知道我们早期购买海外主机是比较麻烦的,信用卡和PAYPAL还没有普及,大家可能只有银联和支付宝,很多人选择海外主机还需要代购。虽然如今很多人建站少了,而且大部分人都用云服务器。但是老鹰主机...
易探云服务器怎么样?易探云是国内一家云计算服务商家,致力香港云服务器、美国云服务器、国内外服务器租用及托管等互联网业务,目前主要地区为运作香港BGP、香港CN2、广东、北京、深圳等地区。目前,易探云推出的国内云服务器优惠活动,国内云服务器2核2G5M云服务器低至330元/年起;成都4核8G/200G硬盘/15M带宽,仅1888元/3年起!易探云便宜vps服务器配置推荐:易探云vps云主机,入门型云...
腾讯云轻量应用服务器又要免费升级配置了,之前已经免费升级过一次了(腾讯云轻量应用服务器套餐配置升级 轻量老用户专享免费升配!),这次在上次的基础上再次升级。也许这就是良心云吧,名不虚传。腾讯云怎么样?腾讯云好不好。腾讯云轻量应用服务器 Lighthouse 是一种易于使用和管理、适合承载轻量级业务负载的云服务器,能帮助个人和企业在云端快速构建网站、博客、电商、论坛等各类应用以及开发测试环境,并提供...