`
m635674608
  • 浏览: 5042565 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

HttpClient 4.3.3 cookie rejected的解决办法

 
阅读更多

在用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

分享到:
评论

相关推荐

    最全最新httpclient4.3.3

    在本文中,我们将深入探讨HttpClient 4.3.3版本,它是HTTPComponents项目的一部分,提供了丰富的功能和优化的性能,广泛应用于网络抓包、API调用等场景。 一、HttpClient简介 HttpClient是Apache软件基金会的一个...

    httpclient4.3.3

    《HttpClient 4.3.3:构建高效网络通信的核心库》 HttpClient 4.3.3 是 Apache 组织提供的一款强大的 HTTP 客户端库,它为开发者提供了丰富的功能,便于实现各种复杂的HTTP请求和处理。HttpClient 4.x 系列在功能、...

    HttpClient4.3.3及其依赖的包

    HttpClient 4.3.3是该库的一个版本,提供了许多增强的功能和性能优化,旨在提高应用程序的网络交互效率。在这个版本中,HttpClient不仅包含主要的HTTP客户端实现,还可能包括它依赖的一些其他Apache HTTP组件。 ...

    最新 httpclient-4.3.3

    总的来说,HttpClient 4.3.3 是 Java 开发者处理 HTTP 协议的理想选择,无论是进行简单的网页抓取,还是构建复杂的网络服务,都能提供稳定、高效的解决方案。其丰富的功能、优秀的性能和良好的社区支持,使得 ...

    httpclient-4.3.3.jar和httpcore-4.3.2.jar

    《深入理解HTTPClient 4.3.3与HTTPCore 4.3.2在Java中的应用》 HTTPClient和HTTPCore是Apache基金会开发的两个重要组件,广泛应用于Java中的网络通信。HTTPClient提供了高级的HTTP客户端功能,而HTTPCore则是其底层...

    httpclient-4.3.3和httpcore-4.2.1资源下载

    HTTPClient 4.3.3是该库的一个稳定版本,改进了性能,修复了已知问题,并提供了更好的API设计。 HTTPCore是HTTPClient的基础库,专注于HTTP协议的底层实现,包括连接管理、请求和响应处理等核心功能。...

    httpclient-4.3.3.jar

    httpclient-4.3.3.jar 三、使用方法 使用HttpClient发送请求、接收响应很简单,一般需要如下几步即可。 1. 创建HttpClient对象。 2. 创建请求方法的实例,并指定请求URL。如果需要发送GET请求,创建HttpGet对象;...

    httpclient-4.5.3 api 中文版

    5. **Cookie管理**:HttpClient 的`CookieStore`和`CookiePolicy`接口帮助管理Cookie,支持标准的Cookie协议,并能根据策略决定接受哪些Cookie。 6. **认证**:HttpClient 支持多种认证机制,包括基本认证、摘要...

    httpclient-4.3.3+jsoup-1.7.3模拟登陆csdn

    本项目涉及的是使用Apache HttpClient 4.3.3和Jsoup 1.7.3这两个开源库来实现对CSDN(China Software Developer Network)网站的模拟登录,并在成功登录后抓取用户的个人主页内容。下面将详细阐述这两个库的功能以及...

    httpUtil httpclient 登陆携带cookie访问下一个连接

    在这个场景中,我们关注的是如何使用`httpclient`进行模拟登录并携带cookie来访问后续的URL。这个过程通常涉及到处理session和身份验证,对于开发需要登录功能的Web应用或自动化测试脚本尤其有用。 首先,`...

    httpclient-4.3.1.jar,httpcore-4.3.2.jar和httpmime-4.3.5.jar

    标题中的“httpclient-4.3.1.jar”,“httpcore-4.3.2.jar”和“httpmime-4.3.5.jar”分别指的是Apache HttpClient库的不同组件和版本。这些是Java开发中用于HTTP通信的重要库,由Apache软件基金会提供。下面将详细...

    httpcore-4.3.2和httpclient-4.3.3.jar

    HTTPClient则是建立在HTTPCore之上的一个更高级别的库,它提供了一套完整的HTTP客户端实现,支持各种HTTP方法(如GET、POST、PUT等)以及复杂的HTTP特性,如Cookie管理、认证、重定向处理等。在4.3.3版本中,...

    httpClient4.3官方包

    4. **Cookie管理**:HttpClient 4.3支持标准的Cookie管理,包括`BasicCookieStore`和`CookieSpecRegistry`,可以方便地处理服务器返回的Cookie信息。 5. **认证机制**:HttpClient提供了多种认证策略,如`...

    httpclient-cache-4.3.3.jar

    httpclient-cache-4.3.3.jar

    C# HttpClient Cookie验证解决方法

    本文将深入探讨如何在C#中使用`HttpClient`处理Cookie验证。 首先,理解Cookie验证的基本原理。Cookie是一种在客户端和服务器之间传递状态信息的方式。当用户登录网站后,服务器通常会发送一个包含会话ID的Cookie到...

    httpclient-4.3.3.jar中文-英文对照文档.zip

    ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件...

    【ASP.NET编程知识】.NET CORE HttpClient的使用方法.docx

    .NET CORE HttpClient 的使用方法 .NET CORE 中的 HttpClient 是一个非常重要的组件,它提供了一个强大且灵活的方式来发送 HTTP 请求。然而,在使用 HttpClient 时,我们需要注意一些重要的配置和使用方法,以避免...

    爬虫 httpclient所有jar

    httpclient-4.3.3.jar httpclient-cache-4.3.3.jar httpcore-4.3.2.jar httpmime-4.3.3.jar javabase64-1.3.1.jar json.jar json-lib-2.4-jdk15.jar jsoup_1.6.2_add.jar mysql-connector-java.5.1.7.jar sqljdbc4....

    delphi操作NetHTTPClient读写cookie例子

    delphi操作NetHTTPClient读写cookie例子

Global site tag (gtag.js) - Google Analytics