android HTTp协议获取数据总结

来源:互联网 发布:网络安全设备维保方案 编辑:程序博客网 时间:2024/05/19 23:12

                     HTTp协议获取数据总结

1、协议简介

 

         HTTP (Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种协议。

         HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。 HTTP 1.0中,客户端的每次请求都要求建立一次单独的连接,在处理完本次请求后,就自动释放连接。 HTTP 1.1中则可以在一次连接中处理多个请求,并且多个请求可以重叠进行,不需要等待一个请求结束后再发送下一个请求。

         由于HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”、“无状态”,要保持客户端程序的在线状态,需要不断地向服务器发起连接请求。通常的做法是即使不需要获得任何数据,客户端也保持每隔一段固定的时间向服务器发送一次“保持连接”的请求,服务器在收到该请求后对客户端进行回复,表明知道客户端“在线”。若服务器长时间无法收到客户端的请求,则认为客户端“下线”,若客户端长时间无法收到服务器的回复,则认为网络已经断开。

 

2、GetPost请求

 

         Post请求可以向服务器传送数据,而且数据放在HTML HEADER内一起传送到服务端URL地址,数据对用户不可见。

get是把参数数据队列加到提交的URL中,值和表单内各个字段一一对应,例如(http://www.baidu.com/s?w=%C4&inputT=2710

         get 传送的数据量较小,不能大于2KBpost传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KBIIS5中为100KB

         get安全性非常低,post安全性较高。

 

2、获取数据实现步骤 

1>从网络中获取一张图片

                //构造URL对象 

                URL url = new URL(“http://192.168.1.112/gg.gif”);

                //基于HTTP协议连接对象即HttpURLConnection对象

                                     HttpURLConnection conn = (HttpURLConnection) url.openConnection();                                      //设置HttpURLConnection对象属性

conn.setConnectTimeout(5000);  //超时时间

                                     conn.setRequestMethod("GET");  //请求方式

                                       //通过服务器返回的状态码判断请求是否成功

                                     if(conn.getResponseCode() == 200){

                                              //得到服务器返回的数据

                                               InputStream inStream = conn.getInputStream();  

                                               //从输入流中读取数据得到二进制数据

                                               ByteArrayOutputStream outStream = new ByteArrayOutputStream();

                                               byte[] buffer = new byte[1024];

                                               int len = 0;

                                               while( (len = inStream.read(buffer)) != -1){

                         //往内存写入数据

                                                        outStream.write(buffer, 0, len);

                                               }

                                               inStream.close();

                                               data = outStream.toByteArray();

                                     }

                                     //位图图片对象

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0, data.length);

                               //显示图片

 imageView.setImageBitmap(bitmap);

 

       2>从网络获取网页的html代码

         //得到html的二进制数据  

       public String getPictureData(String path) throws Exception{ 

        // URL 代表一个统一资源定位符,它是指向互联网“资源”的指针。  

        URL url = new URL(path); 

        // 每个 HttpURLConnection 实例都可用于生成单个请求,  

        //但是其他实例可以透明地共享连接到 HTTP服务器的基础网络  

        HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

        //设置 URL请求的方法  

        conn.setRequestMethod("GET"); 

        //设置一个指定的超时值(以毫秒为单位),  

        //该值将在打开到此 URLConnection引用的资源的通信链接时使用。  

        conn.setConnectTimeout(5 * 1000); 

        // conn.getInputStream()返回从此打开的连接读取的输入流  

        InputStream inStream = conn.getInputStream();//通过输入流获取html数据  

        byte[] data = readInputStream(inStream);//得到html的二进制数据  

        String html = new String(data); 

        return html; 

         

    } 

      

      

    //读取输入流中的数据,返回字节数组byte[]  

    public byte[] readInputStream(InputStream inStream) throws Exception{ 

        //此类实现了一个输出流,其中的数据被写入一个 byte数组  

        ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 

        // 字节数组  

        byte[] buffer = new byte[1024]; 

        int len = 0; 

        //从输入流中读取一定数量的字节,并将其存储在缓冲区数组buffer  

        while ((len = inStream.read(buffer)) != -1) { 

            // 将指定 byte 数组中从偏移量 off开始的 len 个字节写入此输出流  

            outStream.write(buffer, 0, len); 

        } 

        inStream.close(); 

        //toByteArray()创建一个新分配的 byte数组。  

        return outStream.toByteArray(); 

    } 

原创粉丝点击