zoukankan      html  css  js  c++  java
  • Http客户端再封装

    Android系统上推荐的Http客户端从Apache变成[HttpURLConnection],主要理由包括
    *
    *
    *

    不过因为UrlConnection这组接口时间较早(Java 1.0),
    接口的设计并不好[Traps1][Traps2]。下面提供一个更现代的接口[Source]。

    总体设计

    一个Http申请分成几个步骤,其中括号引用的步骤为可选操作。
    请求构造 => (生成请求内容) => 执行请求 => 响应处理 => 响应结果 这几个部分。

    一个典型的请求操作可以写为
    HttpClient.get("url").with(pname, value).toFile("file name").execute().close();
    由于使用HttpURLConnection做为底层实现,它自动上复用实际的Socket连接.

    其中HttpClient为工厂,提供以Http方法为方法名的默认HttpRequest构造。
    还可以通过注册HttpRequestHandler来设置默认的HttpRequest参数。

    与HttpURLConnection不同,execute实际的IO请求发生的地方,它先会调用HttpResponseHandler, 可以
    预处理HttpResponse的消息头等内容.

    HttpResponse对应一次服务器响应, 除了基本的Reader/InputStream接口外,它还提供一些方便方法,如
    写入文件等。

    大部情况下,不需要显式对execute的返回值做处理,因为它会在HttpResponseHandler中处理。
    如果显示处理HttpResponse需要注意,它可能阻塞,超时,并抛出异常。

    一些复杂的情况处理

    大部分处理都使用到了两个接口中即HttRequestHandler和HttpResponseHandler,前者在构造Request时,
    调用,主要处理Requset的相关头域, 后者主要是用于读取响应中的头域,另外可以对错误响应做处理。
    需要注意,HttpRequestHandler可能有多个,调用次序不确定, HttpResponseHandler只能有一个,在进
    行实际IO时调用.

    Cookie使用

    通过setCookie(pname, value, host)或setCookieManager来向Request添加请求。
    通过getCookie()得到一个cookie的容器。

    TLS加密

    Url会根据https前缀自动选用Https协议,但需要提供相应的TLS连接用证书和验证能力。这些都可以
    通过httpRequestHandler完成。

    Multipart attachement

    与Post方法一样,添加内容是通过在ReqestHandler中完成,主要方式通过
    getInputStream();
    beginMultiPart(MimeType, boundary);
    addContent(name, Readable);
    addContent(name, MimeType, Readable);
    endMultiPart();
    close();

    一些引用

    [Source]https://github.com/anthonyhl/httpclient
    [HttpURLConnection]:http://developer.android.com/reference/java/net/HttpURLConnection.html
    [Traps1]:http://www.javaworld.com/article/2075162/core-java/dodge-the-traps-hiding-in-the-urlconnection-class.html
    [Traps2]:http://www.blogjava.net/supercrsky/articles/247449.html

  • 相关阅读:
    嵌套函数
    大括号{ }
    不是俺的错
    hasOwnProperty()
    属性的查找过程
    原型和原型链——汤姆大叔
    JS问题汇总
    phpcms无刷新分页
    phpcms开发过程中遇到的问题总结
    基于物联网的自动氮吹仪
  • 原文地址:https://www.cnblogs.com/ahuangliang/p/http-client-api.html
Copyright © 2011-2022 走看看