zoukankan      html  css  js  c++  java
  • JAVA: httpclient 具体解释——第三章;


    httpclient 具体解释——第一章。

    httpclient 具体解释——第二章;

    httpclient 具体解释——第三章;

    httpclient 具体解释——第四章; 

    httpclient 具体解释——第五章。

    httpclient 具体解释——第六章;

    httpclient 具体解释——第七章;


    相对于httpurlconnection ,httpclient更加丰富,也更加强大,当中apache有两个项目都是httpclient。一个是commonts包下的。这个是通用的。更专业的是org.apache.http.包下的。所以我一般用后者;


    httpclient能够处理长连接。保存会话,重连接,以及请求过滤器,连接重用等等...


    以下是測试代码(所有总结来自官方文档,以及翻译)


    需要下载核心包:httpclient-4.3.4.jar ,也可在官网下载:http://hc.apache.org/downloads.cgi



    	//=========================== 第三章 =================================================
    	
    	/**
    	 * 最初,Http被设计成一个无状态的协议。
    	 * 网景(netscape)公司,最先在他们的产品中支持http状态管理,而且制定了一些专有规范。

    * 可是。如今多数的应用的状态管理机制都在使用网景公司的规范,而网景的规范和官方规定是不兼容的。 */ private static void test14(){ //===================================================== //网景版本号的Cookie ,网景版本号是0 。标准版本号是1 BasicClientCookie netscapeCookie = new BasicClientCookie("name", "value"); netscapeCookie.setVersion(0); /** * 跨域訪问设置domain方式: “.” + other.com,这样在 other.com域下能够获取cookie * 假设在同一应用中则设置: */ netscapeCookie.setDomain(".other.com"); /** * 能够在tomcat webapps目录下的所有应用共享此cookie * cookie.setPath("/webapp_b/")仅仅是webapp_b应用才干获取此cookie */ netscapeCookie.setPath("/"); //===================================================== //以下是标准版的cookie(版本号为1) BasicClientCookie stdCookie = new BasicClientCookie("name", "value"); stdCookie.setVersion(1); stdCookie.setDomain(".mycompany.com"); stdCookie.setPath("/"); stdCookie.setSecure(true); // server发送过来的属性都必须保留 stdCookie.setAttribute(ClientCookie.VERSION_ATTR, "1"); stdCookie.setAttribute(ClientCookie.DOMAIN_ATTR, ".mycompany.com"); //===================================================== //创建了Set-Cookie2兼容cookie。 BasicClientCookie2 cookie2 = new BasicClientCookie2("name", "value"); cookie2.setVersion(1); cookie2.setDomain(".mycompany.com"); cookie2.setPorts(new int[] {80,8080}); cookie2.setPath("/"); cookie2.setSecure(true); cookie2.setAttribute(ClientCookie.VERSION_ATTR, "1"); cookie2.setAttribute(ClientCookie.DOMAIN_ATTR, ".mycompany.com"); cookie2.setAttribute(ClientCookie.PORT_ATTR, "80,8080"); //===================================================== //自己实现CookieSpec接口,然后创建一个CookieSpecProvider接口来新建、 //初始化自己定义CookieSpec接口。最后把CookieSpecProvider注冊到HttpClient中。 //一旦我们注冊了自己定义策略,就能够像其它标准策略一样使用了。 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()) //BrowserCompatSpecFactory 浏览器兼容标准工厂 .register(CookieSpecs.BROWSER_COMPATIBILITY,new BrowserCompatSpecFactory()) .register("easy", easySpecProvider) .build(); RequestConfig requestConfig = RequestConfig.custom() .setCookieSpec("easy") .build(); CloseableHttpClient httpclient = HttpClients.custom() .setDefaultCookieSpecRegistry(r) .setDefaultRequestConfig(requestConfig) .build(); } /** * cookie持久化 */ private static void test15(){ CookieStore cookieStore = new BasicCookieStore(); BasicClientCookie cookie = new BasicClientCookie("name", "value"); cookie.setVersion(0); cookie.setDomain(".mycompany.com"); cookie.setPath("/"); //BasicCookieStore中的Cookie,当载体对象被当做垃圾回收掉后,就会丢失。 cookieStore.addCookie(cookie); CloseableHttpClient httpclient = HttpClients.custom() .setDefaultCookieStore(cookieStore) //设置cookie,供server使用 .build(); } /** * 通过HttpClientContext 设置cookie 以及cookie标准 * * CookieSpec对象 代表实际的Cookie规范。

    CookieOrigin对象 代表实际的origin server的具体信息。 CookieStore对象 。这个属性集中的值会代替默认值。 我们也能够在不同的线程中使用不同的运行上下文。 我们在http请求层指定的cookie规范集和cookie store会覆盖在http Client层级的默认值。

    */ private static void test16() throws ClientProtocolException, IOException{ CloseableHttpClient httpclient = HttpClients.createDefault(); HttpClientContext context = HttpClientContext.create(); CookieStore cookieStore = new BasicCookieStore(); //cookieStore 存放cookie............. Registry<CookieSpecProvider> r = RegistryBuilder .<CookieSpecProvider> create() //最佳适配标准工厂 .register(CookieSpecs.BEST_MATCH, new BestMatchSpecFactory()) //BrowserCompatSpecFactory 浏览器兼容标准工厂 .register(CookieSpecs.BROWSER_COMPATIBILITY,new BrowserCompatSpecFactory()) .build(); context.setCookieSpecRegistry(r); context.setCookieStore(cookieStore); HttpGet httpget = new HttpGet("http://www.baidu.com"); httpclient.execute(httpget, context); // Cookie origin details CookieOrigin cookieOrigin = context.getCookieOrigin(); // Cookie spec used CookieSpec cookieSpec = context.getCookieSpec(); }



  • 相关阅读:
    P1772 [ZJOI2006]物流运输
    P3951 小凯的疑惑
    P1082 同余方程(【模板】exgcd)
    T107741 【模板】权值线段树合并
    P3205 [HNOI2010]合唱队
    P1062 数列
    P1144 最短路计数
    P1502 窗口的星星
    P4147 玉蟾宫(【模板】悬线法)
    CSP模拟赛#3 分段(T1-26)
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10951275.html
Copyright © 2011-2022 走看看