URL 和URLConnection 实现网络通信

URL
URL:Uniform(adj 统一的,一致的) Resource Locator()定位器
它是指向互联网资源的指针,资源是 简单的文件或者目录,也可以是复杂的引用。
例如对数据库或者搜索引擎的查询。
格式:
          protocol://host:port/resourcename
JDK中还提供了一个URI(Uniform Resource Identifies)类 实例代表一个资源标识符
URL则负责打开一个到达该资源的输入流

当使用URL构造器获得指向某个资源的URL对象后
URL murl =new URL("139.129.132.218/bansen.jpg")

就可以使用URL的下列常用方法来获取资源
  • String getFile()   :  获取此URL指向的资源名
  • String getHost() :  获取此URL指向的主机名
  • String getPath() :  获取此URL的路径部分
  • int      getPort() : 获取此URL的端口号
  • String getProtocol():获取此URL的协议名称
  • String getQuery(): 获取URL 的查询字符串部分
  • URLConnection openConnection() :返回一个URLConnection对象,它表示URL所引用的远程服务器和本地之间的一个连接。
  • InputStream openStream(): 打开与此URL的连接,并返回一个用于读取该URL资源的输入流

示例:
AppCompatImageView show;
Bitmap bitmap=null;
public void Urltest(){
    this.show=(AppCompatImageView)findViewById(R.id.show);
    //初始化ImageView

    final android.os.Handler handler =new Handler(){
        @Override
        public void handleMessage(Message msg) {
            if(msg.what==666){
                show.setImageBitmap(bitmap);
            }
        }
    };
    new Thread(){
        @Override
        public void run() {
            try {
                URL murl=new URL("http://139.129.132.218/wp-content/uploads/2015/10/1441078212502.jpg");
                InputStream in=murl.openStream();//打开对应的输入流
                bitmap= BitmapFactory.decodeStream(in);
                handler.sendEmptyMessage(666);
                in.close();
            }catch (Exception e){
                Snackbar.make(fab,e.toString(),Snackbar.LENGTH_SHORT).show();
            }

        }
    }.start();
}
运行图:







URLConnection

URL的 openConnection() :返回一个URLConnection对象,URLConnection表示本地程序与远程服务器之间的一个连接。
程序可以通过URLConnection向目标地址发送请求,然后也可以读取URL引用的资源。

使用步骤:
  1. 通过调用URL的openURLConnection()方法来创建URLConnection对象
  2. 设置URLConnection的参数和普通请求属性
  3. 如果只发生GET请求,使用connect方法建立与远程资源之间的实际连接即可;若需发送POST请求,则需要获取URLConnection实例对应的输出流来发送请求参数
  4. 远程资源成为可用的资源,程序可以访问远程资源的头字段,或通过输入流读取远程资源的数据

上面的第二部可以使用URLConnection的一下方法来设置
  • setAllowUserInteraction():                                    设置allowUserInteraction请求头字段的值
  • setDoInput() :                                                     设置doIput请求头字段的值
  • setDoOutput():                                                    设置dooutout请求头字段的值
  • setifModifiedSince():                                            设置ifModifiedSince请求头字段的值
  • setUserCaches():                                                  设置UserCaches请求头字段的值
  • setRequestProperty(String key,String value):          设置改URLConnection的key请求头字段的值为 Value 参数的值   
                                                                                    like: connection.setRequestProperty(”accept“,“*/*”):     这个函数就是因为HTTP请求的头字段需要的头字段的值太多了,然后用这个函数就不用老是调用专门的函数
  • addRequestProperty(String key,String value):         追加URLConnection的key请求头字段的值为 Value 参数的值,不会覆盖之前set的
  • Object getContent():                                             获取返回的URLConnectiion的内容
  • String getHeaderField(String name):                      获取指定响应头的值
  • getInputStream();                                                 返回该URLConnectiion的输入流 用于获取响应的内容
  • getOutputStream():                                               返回该URLConnectiion的输出流 用于发送请求参数


还有getHeaderField()方法用于根据响应头字段来返回对应的值,而某些头字段需要经常访问
java还提供了
  • getContentEncoding(): 获取content-encoding响应头字段的值
  • getContentLength(): 获取conten-length响应头字段的值
  • getContentType(): 获取content-type响应头字段的值
  • getDate():获取date响应头字段的值
  • getExpirarion():获取expires响应头字段的值
  • getLastModified():获取last-modified响应头字段的值