httpClient post with cookie
2014-06-12 17:47
288 查看
package baidu.youxi.httpclient; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import org.apache.http.HeaderIterator; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.ParseException; import org.apache.http.client.CookieStore; import org.apache.http.client.config.CookieSpecs; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.protocol.HttpClientContext; import org.apache.http.config.Registry; import org.apache.http.config.RegistryBuilder; import org.apache.http.cookie.CookieSpecProvider; 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.BasicClientCookie; import org.apache.http.impl.cookie.BestMatchSpecFactory; import org.apache.http.impl.cookie.BrowserCompatSpecFactory; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.junit.Test; public class TestHttpClient { // 创建CookieStore实例 static CookieStore cookieStore = null; static HttpClientContext context = null; String loginUrl = "https://passport.baidu.com/v2/api/?login"; String testUrl = "http://i.baidu.com/"; @Test public void testLogin() throws Exception { System.out.println("----testLogin"); // // 创建HttpClientBuilder // HttpClientBuilder httpClientBuilder = HttpClientBuilder.create(); // // HttpClient // CloseableHttpClient client = httpClientBuilder.build(); // 直接创建client CloseableHttpClient client = HttpClients.createDefault(); HttpPost httpPost = new HttpPost(loginUrl); Map<String,String> parameterMap = new HashMap<String,String>(); parameterMap.put("userName", "aaaaaa"); parameterMap.put("password", "xxxxx"); UrlEncodedFormEntity postEntity = new UrlEncodedFormEntity(TestHttpClient.getParam(parameterMap), "UTF-8"); httpPost.setEntity(postEntity); System.out.println("request line:" + httpPost.getRequestLine()); try { // 执行post请求 HttpResponse httpResponse = client.execute(httpPost); System.out.println(httpResponse.getStatusLine().getStatusCode()); printResponse(httpResponse); // cookie store TestHttpClient.setCookieStore(httpResponse); // context TestHttpClient.setContext(); // 执行get请求 System.out.println("----the same client"); HttpGet httpGet = new HttpGet(testUrl); System.out.println("request line:" + httpGet.getRequestLine()); HttpResponse httpResponse1 = client.execute(httpGet); printResponse(httpResponse1); } catch (IOException e) { e.printStackTrace(); } finally { try { // 关闭流并释放资源 client.close(); } catch (IOException e) { e.printStackTrace(); } } } @Test public void testContext() throws Exception { System.out.println("----testContext"); // 使用context方式 CloseableHttpClient client = HttpClients.createDefault(); HttpGet httpGet = new HttpGet(testUrl); System.out.println("request line:" + httpGet.getRequestLine()); try { // 执行get请求 HttpResponse httpResponse = client.execute(httpGet, context); System.out.println("context cookies:" + context.getCookieStore().getCookies()); printResponse(httpResponse); } catch (IOException e) { e.printStackTrace(); } finally { try { // 关闭流并释放资源 client.close(); } catch (IOException e) { e.printStackTrace(); } } } @Test public void testCookieStore() throws Exception { System.out.println("----testCookieStore"); // 使用cookieStore方式 CloseableHttpClient client = HttpClients.custom() .setDefaultCookieStore(cookieStore).build(); HttpGet httpGet = new HttpGet(testUrl); System.out.println("request line:" + httpGet.getRequestLine()); try { // 执行get请求 HttpResponse httpResponse = client.execute(httpGet); System.out.println("cookie store:" + cookieStore.getCookies()); printResponse(httpResponse); } catch (IOException e) { e.printStackTrace(); } finally { try { // 关闭流并释放资源 client.close(); } catch (IOException e) { e.printStackTrace(); } } } public static void printResponse(HttpResponse httpResponse) throws ParseException, IOException { // 获取响应消息实体 HttpEntity entity = httpResponse.getEntity(); // 响应状态 System.out.println("status:" + httpResponse.getStatusLine()); System.out.println("headers:"); HeaderIterator iterator = httpResponse.headerIterator(); while (iterator.hasNext()) { System.out.println("\t" + iterator.next()); } // 判断响应实体是否为空 if (entity != null) { String responseString = EntityUtils.toString(entity); System.out.println("response length:" + responseString.length()); System.out.println("response content:" + responseString.replace("\r\n", "")); } } public static void setContext() { System.out.println("----setContext"); context = HttpClientContext.create(); Registry<CookieSpecProvider> registry = RegistryBuilder.<CookieSpecProvider> create() .register(CookieSpecs.BEST_MATCH, new BestMatchSpecFactory()) .register(CookieSpecs.BROWSER_COMPATIBILITY, new BrowserCompatSpecFactory()).build(); context.setCookieSpecRegistry(registry); context.setCookieStore(cookieStore); } public static void setCookieStore(HttpResponse httpResponse) { System.out.println("----setCookieStore"); cookieStore = new BasicCookieStore(); // JSESSIONID String setCookie = httpResponse.getFirstHeader("Set-Cookie").getValue(); String JSESSIONID = setCookie.substring("JSESSIONID=".length(), setCookie.indexOf(";")); System.out.println("JSESSIONID:" + JSESSIONID); // 新建一个Cookie BasicClientCookie cookie = new BasicClientCookie("JSESSIONID",JSESSIONID); cookie.setVersion(0); cookie.setDomain("www.baidu.com"); cookie.setPath("/"); // cookie.setAttribute(ClientCookie.VERSION_ATTR, "0"); // cookie.setAttribute(ClientCookie.DOMAIN_ATTR, "127.0.0.1"); // cookie.setAttribute(ClientCookie.PORT_ATTR, "8080"); // cookie.setAttribute(ClientCookie.PATH_ATTR, "/CwlProWeb"); cookieStore.addCookie(cookie); } public static List<NameValuePair> getParam(Map<String,String> parameterMap) { List<NameValuePair> param = new ArrayList<NameValuePair>(); Iterator<Map.Entry<String,String>> it = parameterMap.entrySet().iterator(); while (it.hasNext()) { Entry<String,String> parmEntry = it.next(); param.add(new BasicNameValuePair((String) parmEntry.getKey(),(String) parmEntry.getValue())); } return param; } }
相关文章推荐
- Post with HttpClient
- HttpQuery httpClient with cookie sessionID
- Struggling trying to get cookie out of response with HttpClient in .net 4.5
- HttpClient发送get请求,post请求,携带cookie访问,json提交
- Post with HttpClient
- httpclient提示Cookie rejected: violates RFC 2109: domain must start with a dot
- PHP HttpClient封装(可实现GET POST Cookie Session)
- HttpClient3 POST的中文编码问题
- c# 模拟http post 带cookie
- (转)用HttpClient来模拟浏览器GET POST
- Analyze URL Redirection with HTTP GET&POST
- Http client to POST using multipart/form-data
- 1. Simple HTTP load-balancing with cookie insertion
- C# : WebRequest发起Http Post请求模拟登陆并cookie处理示例
- httpclient addcookie
- HttpClient4 Post XML到一个服务器上
- HttpClient4 警告: Invalid cookie header 的问题解决
- HttpClient POST 的 UTF-8 编码问题
- HTTP request is unauthorized with client authentication scheme 'Anonymous'.
- 【转】C# WebRequest发起Http Post请求模拟登陆并cookie处理示例