美文网首页
Android客户端的Http请求

Android客户端的Http请求

作者: HolenZhou | 来源:发表于2016-08-19 17:27 被阅读281次

    Http请求

    • 请求方式
      主要包含:GET、POST、HEAD、OPTIONS、DELETE、TRACE、PUT,我们一般只用到GET和POST。
    • GET和POST请求的区别
      这两种方式的区别主要表现在数据传递上:


      顺便我们从请求英文名的字面意思理解一下GET、POST、PUT和DELETE的区别:Get是最常用的,就是向Web Server发请求“获取”资源;那么Post就是向Web Server“邮寄”一些封装的数据包获取资源,这两者方法严格的说都是“索取”行为。
      Delete方法,顾名思义就是通过http请求删除指定的URL上的资源啦,Delete请求一般会返回3种状态码:

    200 (OK) - 删除成功,同时返回已经删除的资源
    202 (Accepted) - 删除请求已经接受,但没有被立即执行(资源也许已经被转移到了待删除区域)
    204 (No Content) - 删除请求已经被执行,但是没有返回资源(也许是请求删除不存在的资源造成的)

    而Put方法简单理解,就是往Web Server上直接扔资源(上传资源)嘛![^reference1]
    GET,POST,PUT,DELETE URL 全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查 ,改 ,增 ,删 4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询 资源信息,而POST一般用于更新 资源信息(个人认为这是GET和POST的本质区别,也是协议设计者的本意,其它区别都是具体表现形式的差异 )。 [^reference2] 
    
    • Android客户端实现Http请求的方式和工具们
     //1.通过JDK自带的URLConnection
    //Sun公司提供的库,也是Java的标准类库[java.net]中的一员,但这个类什么都没封装,用起来很原始,若需要高级功能,则会显得不太方便,比如重访问的自定义,会话和cookie等一些高级功能。
    URL url = new URL("http://www.android.com/");   
    HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();   
    try {
         InputStream in = new BufferedInputStream(urlConnection.getInputStream());
         readStream(in);
       } finally {
         urlConnection.disconnect();
       } 
    //2.Apache的HttpClient
    //Apache公司提供的库,提供高效的、最新的、功能丰富的支持HTTP协议工具包,支持HTTP协议最新的版本和建议,是个很不错的开源框架,封装了http的请求,参数,内容体,响应等,拥有众多API。
    HttpClient httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet();
    httpClient.execute(httpGet);  
    

    最初的时候,不管是什么Http的框架都是基于以上两种最基础的API进行了各种再封装。而且因为HttpURLConnection早期的bug,所以在2.3之后建议使用HttpURLConnection,之前建议使用HttpClient。后来因为HttpClient的一些缺点和维护成本较高,Android开发团队转投更为轻便的HttpUrlConnection,所以5.0之后干脆废弃了HttpClient,6.0进行了删除。所以在Android-23中的sdk中,已经找不到HttpClient了。
    当然,现在已经有了更新的OkHttp:OKHttp是Android版Http客户端。非常高效,支持SPDY、连接池、GZIP和 HTTP 缓存。从Android4.4开始,HttpURLConnection的底层实现采用的是OkHttp。Volley在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient。这里指的是volley使用的http传输层,从volley创建RequestQueue的源码中可以看出:

    if (stack == null) {
        if (Build.VERSION.SDK_INT >= 9) {
            stack = new HurlStack();
        } else {
            // Prior to Gingerbread, HttpUrlConnection was unreliable.
            // See: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
            stack = new HttpClientStack(AndroidHttpClient.newInstance(userAgent));
        }
    }
    

    代码中的HurlStack执行网络请求就是基于HttpURLConnection的。
    不过因为Volley在功能扩展性上的局限,始终无法与OkHttp相比。所以Volley最终停止了更新,而OkHttp得到了官方的认可,并在不断优化。不过Volley可以轻松设置OkHttp作为其传输层,我们的项目中一直用的volley,想要使用OkHttp,只需要下面两行代码,指定使用的HttpStack为OkHttpStack即可:

    OkHttpClient client = new OkHttpClient();
    RequestQueue mRequestQueue = Volley.newRequestQueue(context, new OkHttpStack(client));
    

    相关文章

      网友评论

          本文标题:Android客户端的Http请求

          本文链接:https://www.haomeiwen.com/subject/yhvbsttx.html