美文网首页
HttpURLConnection

HttpURLConnection

作者: jockerMe | 来源:发表于2016-06-15 10:28 被阅读165次

    URLConnection 对于HTTP (RFC 2616) 用来发送和接受web数据,数据可以是任意类型以及任意长度。这个类可以被用来发送以及接受事先未知长度的流数据。

    使用这个类遵循以下模式:

    1. 通过调用URL.openConnection() 并且强制将结果转换为HttpURLConnection,获取一个新的HttpURLConnection实例。
    2. 准备请求,主要的请求属性是URI,请求头也应该包括元数据例如证书,内容类型,cookie会话。
    3. 可选上传一个请求体。如果需要包含一个请求体,使用setDoOutput(true)配置实例。通过向getOutputStream()返回的stream写入发送数据。
    4. 读取相应。响应头通常包括元数据例如响应体的内容类型和长度,修改日期和cookies会话。这个响应体可以通过getInputStream()返回的stream读取数据。如果相应没有响应体,将会返回一个空的stream。
    5. 断开链接。一旦相应体被读取,HttpURLConnection应该通过调用disconnect()关闭。Disconnecting释放了被connection占用的资源,以便关闭或者重新使用。
    URL url = new URL("http://www.android.com/");
    HttpURLConnection urlConnection =(HttpURLConnection) url.openConnection();
    try{
    InputStream in = new BufferedInputStream(urlConnection.getInputStrea m());
    readStream(in);
    finally{
    urlConnection.disconnect();
    }
    }
    

    Secure Communication with HTTPS
    调用openConnection() 在一个URL 使用 "https"模式,将会返回一个HttpsURLConnection,允许重写默认的HostnameVerifier和SSLSocket-Factory。

    Response Handing
    HttpURLConnection 将会跟随 five HTTP redirects。它将会跟随从源服务到另一个的从的重定向,此实现不遵循冲HTTPS到HTTP的重定向。
    如果HTTP相应遇到了一个错误,getInputStream()将会抛出一个IOException。使用getErrorStream去读写错误响应。通过调用getHeaderFields()将会正常读取headers

    Posting Content
    上传数据到web server,使用setDoOutput(true)配置输出链接。
    为了实现最好的性能,你也可以调用setFixedLengthStreamMode(int)当这个body长度事先知道,或者在不知道body长度时调用setChunkedStreamingMode(int)。否则HttpURLConnection将会被强制在内存中缓冲所有的请求体在他提交之前。浪费内存堆增加了延迟。

    HttpURLConnection UrlConnection = (HttpURLConnection) url.openConnection();
    try{
      urlConnection.setDoOutput(true);
      urlConnection.setChunkedStreamingMode(0);
      
      OutputStream out = new BufferedOutPutStream(urlConnection.getOutputStream());
    writeStream(out);
    
      InputStream in = new BufferedInputStream(urlConnection.getInputStream());
      readStream(in);
     finally{
      urlConnection.disconnect();
    }
    }
    

    设置链接参数的方法:

    • setAllowUserInteraction
    • setDoInput
    • setDoOutput
    • setlfModifiedSince
    • setUseCaches
    • setDefaultAllowUserInteraction
    • setDefaultUseCaches

    设置请求或响应头:
    Http请求允许一个key带多个用逗号分开的values,但是HttpURLConnection只提供了单个操作方法

    • setRequestProperty(key,value)
    • addRequestProperty(key,value)
      setRequsetProperty和addRequestProperty的区别就是,setRequsetProperty会覆盖已经存在的key的所有values,有清零重新赋值的作用。而addRequestProperty则是在原来key的基础上继续添加其它value

    发送URL请求:
    建立实际链接之后,就是发送请求,把请求参数传到服务器,这就需要使用outputStream把请求参数传给服务器:

    • getOutputStream

    获取响应:
    请求发送成功之后,即可获取响应的状态码,如果成功,可以获取响应中的数据,获取这些数据的方法包括:

    • getContent
    • getHeaderField
    • getInputStream

    对于大部分请求来说,getInputStream和getContent用的是最多的。
    相应的信息头用以下方法获取:

    • getContentEncoding
    • getContentLength
    • getContentType
    • getDate
    • getExpiration
    • getLastModifed

    相关文章

      网友评论

          本文标题:HttpURLConnection

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