当前位置: 首页 > news >正文

HttpClient 4.3.3 cookie rejected的解决办法

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

在用HttpClient 的最新版本4.3.3写一个网站注册时,出现了cookie rejected的问题。就是拒绝写入cookie,虽然没影响最终的注册结果,但问题总需要解决的。于是在搜索了网上的解决办法,发现那都是过去的旧版本的解决办法。新版本的4.3.3没有相关的解决办法不过总算知道那是cookie的策略设置问题。于是看了官方网站的文档http://hc.apache.org/httpcomponents-client-4.3.x/tutorial/html/statemgmt.html#d5e553,总算将问题解决了。

网上关于HttpClient4.3.3的开发文档还是比较少,于是写一个HttpClient4.3.3 post请求的代码,包括读取cookie等内容,代码如下:

 

package com.post.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import org.apache.http.Consts;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.CookieSpecs;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.cookie.Cookie;
import org.apache.http.cookie.CookieOrigin;
import org.apache.http.cookie.CookieSpec;
import org.apache.http.cookie.CookieSpecProvider;
import org.apache.http.cookie.MalformedCookieException;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.cookie.BestMatchSpecFactory;
import org.apache.http.impl.cookie.BrowserCompatSpec;
import org.apache.http.impl.cookie.BrowserCompatSpecFactory;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HttpContext;

public class Test {

public static void main(String[] args) throws IOException {
String url="http://localhost/";
HashMap<String, String> hashMap=new  HashMap<String, String>();
hashMap.put("username", "test");
hashMap.put("password", "123456");
String content=doPost(url, hashMap);
System.out.println("content="+content);

}

private static String doPost(String url, HashMap<String, String> hashMap)
throws IOException {
String content = "";
BasicCookieStore cookieStore = new BasicCookieStore();
CookieSpecProvider easySpecProvider = new CookieSpecProvider() {
public CookieSpec create(HttpContext context) {

return new BrowserCompatSpec() {
@Override
public void validate(Cookie cookie, CookieOrigin origin)
throws MalformedCookieException {
// Oh, I am easy
}
};
}

};
Registry<CookieSpecProvider> r = RegistryBuilder
.<CookieSpecProvider> create()
.register(CookieSpecs.BEST_MATCH, new BestMatchSpecFactory())
.register(CookieSpecs.BROWSER_COMPATIBILITY,
new BrowserCompatSpecFactory())
.register("easy", easySpecProvider).build();

RequestConfig requestConfig = RequestConfig.custom()
.setCookieSpec("easy").setSocketTimeout(10000)
.setConnectTimeout(10000).build();

CloseableHttpClient httpclient = HttpClients.custom()
.setDefaultCookieSpecRegistry(r)
.setDefaultRequestConfig(requestConfig)
.setDefaultCookieStore(cookieStore)

.build();
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
if (hashMap != null) {
Iterator<String> it = hashMap.keySet().iterator();
while (it.hasNext()) {

String key = it.next();
String value = hashMap.get(key);
nvps.add(new BasicNameValuePair(key, value));
}
}

HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
httpPost.setHeader("Accept-Encoding", "gzip, deflate");
httpPost.setHeader("Accept-Language", "en-US,en;q=0.5");
httpPost.setHeader("Cache-Control", "max-age=0");
httpPost.setHeader("Connection", "keep-alive");
httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded");

httpPost.setHeader(
"User-Agent",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:28.0) Gecko/20100101 Firefox/28.0");
// 如果参数是中文,需要进行转码
httpPost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8));

CloseableHttpResponse response = null;
try {
response = httpclient.execute(httpPost);

HttpEntity entity = response.getEntity();
for (Header s : response.getAllHeaders()) {
System.out.println("post header====" + s);
}
InputStream is = entity.getContent();
BufferedReader in = new BufferedReader(new InputStreamReader(is,
Consts.UTF_8));
String line = "";
while ((line = in.readLine()) != null) {

content += line;
}

List<Cookie> cookies = cookieStore.getCookies();
if (cookies.isEmpty()) {
System.out.println("None");
} else {
//读取Cookie
for (int i = 0; i < cookies.size(); i++) {
System.out.println("post request - "
+ cookies.get(i).toString());
}
}

} finally {
if(response!=null)
response.close();
}
return content;
}
}

 http://www.tuicool.com/articles/MZ36Zz

 

 

http://blog.csdn.net/zjweii/article/details/28597031

转载于:https://my.oschina.net/xiaominmin/blog/551077

相关文章:

  • 大象也能起舞,Citrix X1计划让你对笔记本电脑say good bye
  • VOA 2009/11/02 DEVELOPMENT REPORT - In Kenya, a Better Life Through Mobile Money
  • 安装 chkrootkit报错:/usr/bin/ld: cannot find -lc
  • 大型网站技术架构(八)网站的安全架构
  • 32位程序在64位系统上获取系统安装时间
  • 怎样 配置这个网络拓扑
  • 关于烂代码的那些事(中)
  • Spring学习总结(4)——Spring AOP教程
  • CentOS 7安装配置Apache HTTP Server
  • 《团队名称》第八次团队作业:Alpha冲刺
  • Velocity常用方法
  • 《Play for Java》学习笔记(三)template+Message
  • [翻译] JTBorderDotAnimation
  • 2019春总结作业
  • bzoj1202
  • Android 控件背景颜色处理
  • CSS相对定位
  • echarts的各种常用效果展示
  • ERLANG 网工修炼笔记 ---- UDP
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • PAT A1017 优先队列
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 代理模式
  • 分类模型——Logistics Regression
  • 服务器之间,相同帐号,实现免密钥登录
  • 复习Javascript专题(四):js中的深浅拷贝
  • 使用 QuickBI 搭建酷炫可视化分析
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 协程
  • 移动端解决方案学习记录
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #pragma pack(1)
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (a /b)*c的值
  • (NSDate) 时间 (time )比较
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (十八)SpringBoot之发送QQ邮件
  • (四) 虚拟摄像头vivi体验
  • (四)图像的%2线性拉伸
  • (转)h264中avc和flv数据的解析
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ./和../以及/和~之间的区别
  • .NET Core 项目指定SDK版本
  • .NET 使用配置文件
  • .net 微服务 服务保护 自动重试 Polly
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .net开发引用程序集提示没有强名称的解决办法
  • .Net转前端开发-启航篇,如何定制博客园主题