`
yunlonglove
  • 浏览: 242746 次
社区版块
存档分类
最新评论

HTTP协议的应用与总结

 
阅读更多

最近在看Http协议等网络部分的知识,网络通而信可谓android中比较重要的部分了,而实现Http通信的最重要的莫过于俩个接口:HttpURLConnectionHttpClient。一般情况下俩个接口简单的访问网络。Apache提供的是后者,以后网络部分估计HttpClient用的较多一下。而且实现较容易理解一些。以下是源代码:首先实现的HttpURLConnectionGET方法,下面俩个接口的俩个方法即GETPOST均会实现。。。

public class BaiscHttpGetWay  {

         

         private String path1=null;

         private String resultData=null;

         public String getpath(String path) throws Exception

         {  

                   this.path1=path;

                   URL url=new URL(path1);

                   System.out.println(path1);

                     if(url!=null)

                     {             //由于get的方法相比较容易就不做解释了

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

                              conn.setDoInput(true);

                              conn.setRequestMethod("GET");

                              conn.setConnectTimeout(5*1000);

                                if(conn.getResponseCode()==200)

                                {

                                         InputStream is=conn.getInputStream();

                                         resultData=getresultdata(is);

                                         System.out.println(resultData);

                           

                                }

                            conn.disconnect(); 

                             

                     }
 

                   return resultData;

         }

         private String getresultdata(InputStream is) throws Exception

         {

                   // TODO Auto-generated method stub

           ByteArrayOutputStream out=new ByteArrayOutputStream();

           byte[] buffer=new byte[1024];

           int len=-1;

           while((is.read(buffer))!=-1)

           {

                     out.write(buffer,0,len);
         

           }

           byte[] data=out.toByteArray();

                   return new String(data);

         }
    

}

然后是POSt方法的实现:

public class BasicHttpPostWay

{

         private String path1=null;

         private String resultData=null;

         public String getpath(String path,String param)throws Exception

         {  
                   //传递是以二进制传递字符串无法完成此操作所以用byte数组传递也可以用其他方法

                   byte[] data=param.getBytes();

                   this.path1=path;

                   URL url=new URL(path1);

                   System.out.println(path1);

                   if(url!=null)

                   {

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

                            //这里是Post请求,所以就设置为true

                            conn.setDoInput(true);

                            conn.setDoOutput(true);

                            //设置请求Post

                            conn.setRequestMethod("POST");

                            conn.setConnectTimeout(5*1000);

                            //由于Post请求不能使用缓存

                            conn.setUseCaches(false);

                            conn.setInstanceFollowRedirects(true);

                            //设置其他畅通设置格式以及数组长度,不过若你不用数组直接用字符串的话

                            //查了一下可以用URLEcode.encode进行操作

                            conn.setRequestProperty("Connection","Keep-Alive" );

                            conn.setRequestProperty("Charset", "UTF-8");

                            conn.setRequestProperty("Content-Length",String.valueOf(data) );

                            //配置本次连接Content-type,后面参数正文为Orlencoded编码过的form参数具体是啥我也不知到反正为固定格式

                            conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded" );

                            //连接,从打开连接即openConnection到connect之间必须先配好

                            conn.connect();

                            //查了一下大部分Post都是用DataOutputStream完成此操作

                            DataOutputStream out=new DataOutputStream(conn.getOutputStream());

                             out.write(data);

                             //刷新,关闭

                             out.flush();

                             out.close();

                             if(conn.getResponseCode()==200)

                             {

                                      InputStream is=conn.getInputStream();

                                      //定义一个方法用来转换流的内容

                                       resultData=getresultData(is);

                                      System.out.println(resultData);

                             }

                            

                            conn.disconnect();

                   }
                   return resultData;

         }

         private String getresultData(InputStream is) throws Exception

         {        // TODO Auto-generated method stub

                     ByteArrayOutputStream out=new ByteArrayOutputStream();

                     byte[] buffer=new byte[1024];

                     int len=-1;

                     while((is.read(buffer))!=-1)

                     {

                              out.write(buffer,0,len);

                     }

                     byte[] data=out.toByteArray();
                            return new String(data);

         }

 

}

接下来是HttpClient借口中方法的实现:

首先是GET方法:
public class ApacheHttpGetWay

{

         

         private String  path1=null;

         private String  resultDataString=null;

         

         public String getpath(String path)throws Exception

         { 

                    this.path1=path;

                    //HttpGet的连接对象

                    HttpGet httpGet=new HttpGet(path1);

                    //声明一个HttpClient的对象

                    HttpClient httpClient=new DefaultHttpClient();

                    //执行请求并用HttpResponse接受请求过来的内容

                    HttpResponse httpResponse=httpClient.execute(httpGet);

                    //判断请求是否成功

                    if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)

                    {  //取得返回的字符串

                             resultDataString=EntityUtils.toString(httpResponse.getEntity());

                             System.out.println(resultDataString);

                             

                    }

                    else 

                             {

                         System.out.println("it is null!!!");                

                             }

                   return resultDataString;

                   

                   

         }

}

//然后是POST方法
 

public class ApacheHttpPostWay

 

{

        private String  path1=null;

        private String  resultDataString=null;

 

         public String getpath(String path,List<NameValuePair> param)throws Exception

         {   

                   this.path1=path;

                   //设置连接对象即连接请求

                   HttpPost post=new HttpPost(path1);

                   //将参数加入请求里面定死的

                   post.setEntity(new UrlEncodedFormEntity(param,HTTP.UTF_8));

                   //获取HttpClient的对象

                   HttpClient httpClient=new DefaultHttpClient();

                   //执行请求并将字符返回到httpResponse

                   HttpResponse httpResponse=httpClient.execute(post);

                   //判断是否连接成功格式定死的

                   if(httpResponse.getStatusLine().getStatusCode()==HttpStatus.SC_OK)

                   { //返回字符串格式定死的

                            resultDataString=EntityUtils.toString(httpResponse.getEntity());

                            System.out.println(resultDataString);

                   }

                   else {

                            System.out.println("it is null!!!");

                   }
                   return resultDataString;

         }

 

}


总之而言,在做项目的过程中POST方法使用的较多,因其保密性较好,不过GET用的也较多,所以看个人喜好了。在学习这一块内容的时候要好好把握俩个接口的使用法,这样才能不容易记混!!

分享到:
评论

相关推荐

    HTTP协议总结.pdf

    总结来说,HTTP协议是应用层的网络协议,用于客户端和服务器之间传输数据。它基于TCP/IP协议,支持无状态的请求/响应模式,并且可以通过HTTPS来确保通信的安全。HTTP协议的版本升级增加了更多的功能,使得Web通信...

    应用层协议与应用.rar

    总结来说,“应用层协议与应用.rar”涵盖了网络通信中的多个重要方面,包括但不限于HTTP、HTTPS、FTP、SFTP、NFS、DNS、SMTP、POP3、IMAP以及TCP和UDP等协议的工作原理和应用场景。深入理解这些协议对于网络管理员、...

    计算机网络协议总结

    本文将对计算机网络协议进行总结,涵盖物理层、数据链路层、网络层、传输层和应用层等多个方面。 物理层(比特流) 物理层是计算机网络的最底层,负责将比特流传输到物理媒体上。物理层的主要协议包括PPP协议和...

    路由协议高度总结——路由协议高度总结

    总的来说,路由协议的高度总结涵盖了路由协议的基本概念,包括它们如何工作、静态与动态路由的区别以及如何在Cisco设备上配置这些路由。理解这些基本原理对于网络管理员来说是至关重要的,因为它们直接影响着网络的...

    3-2019054001-张诗宇-Internet应用与应用层协议分析1

    实验报告“3-2019054001-张诗宇-Internet应用与应用层协议分析1”主要涉及互联网应用中的关键协议和工作流程,包括HTTP、DNS、FTP和SMTP。这个实验的主要目的是理解和掌握这些协议的作用、原理以及如何使用Wireshark...

    计算机网络原理实验报告---Wireshark实验:HTTP协议分析

    HTTP(超文本传输协议)是应用层协议,用于客户端和服务器之间的通信。它基于TCP/IP协议栈,以请求/响应模型进行交互。HTTP请求报文和响应报文具有固定的格式。 **HTTP请求报文格式** 1. **请求行**:包括请求方法...

    07HTTP协议应用1

    总结,HTTP协议是互联网上网页内容传输的基础,它的原理、方法、状态码以及与服务器软件如Apache的结合,共同构成了网络通信的核心部分。开发者通过对HTTP的理解和应用,可以创建出丰富的交互式Web应用程序。

    Zigbee协议栈学习总结.doc

    Zigbee 协议栈学习总结 Zigbee 协议栈是基于 IEEE 802.15.4 标准的无线通信协议栈,主要应用于智能家居、商业楼宇自动化、自动读表系统等领域。Zigbee 协议栈的主要特点是高可靠性、低成本、低功耗、高安全性和低...

    常见路由协议高度总结

    路由协议高度总结 路由协议是计算机网络中用于确定路径和维护路由表的协议。根据路由协议的类型,可以分为静态路由协议和动态路由协议。 静态路由协议是由网络管理员手动配置的路由,它不能自动适应网络 topology ...

    WAP无线应用协议 WAP无线应用协议

    **WAP无线应用协议** WAP(Wireless Application ...总结来说,WAP无线应用协议是移动互联网早期的关键技术,它为移动设备接入互联网铺平了道路,虽然现在已被更高效的技术所替代,但其对移动通信行业的影响不可忽视。

    网络 路由协议 对比总结

    网络路由协议对比总结 路由协议是计算机网络中的一种通信协议,用于确定数据包在网络中的传输路径。路由协议的选择对网络的性能和可靠性有着至关重要的影响。在本文中,我们将对常见的路由协议,如RIP、OSPF、IS-IS...

    TCP IP协议分析及应用课件

    总结来说,TCP/IP协议是互联网的基石,它的分析与应用不仅关乎网络通信的效率和可靠性,还影响着各种网络服务的性能和用户体验。深入理解和掌握TCP/IP协议,对于从事IT行业的专业人士至关重要,无论是在开发、运维...

    应用层协议分析报告

    总结来说,这个实验报告提供了对应用层协议,特别是HTTP和DNS的实践经验。通过实际操作和分析,我们能深入理解这两个协议在互联网通信中的作用,以及它们如何协同工作,确保了我们能够便捷地访问和交互网络资源。

    计算机网络协议总复习课程总结

    "计算机网络协议总复习课程总结" 计算机网络协议是计算机专业的一门核心课程, 涉及到网络协议的设计、实现、应用等多方面内容。下面是关于计算机网络协议的知识点总结: 一、协议分层 计算机网络协议采用分层...

    HTTP协议详解_HTTP协议_

    HTTP(超文本传输协议,...总结起来,HTTP协议是互联网的基础,它规定了客户端和服务器之间的通信规则,使得Web应用能够正常运行。理解并熟练运用HTTP协议对于开发Web应用、调试网络问题以及优化网络性能至关重要。

    网络协议分析-重点总结.pdf

    - 因特网电话应用中, RTP与RTCP(实时控制协议)通常与UDP协议结合使用,用于传输语音数据。 2. 运输层协议功能详解: - 提供进程间的逻辑通信,端到端的通信服务。 - 支持复用和分用机制,允许多个应用程序...

    http协议学习总结共10页.pdf.zip

    这份"HTTP协议学习总结共10页.pdf"的资料,很可能包含了对HTTP协议的全面概述,包括其原理、结构、请求方法、响应状态码、报文格式以及与HTTPS的区别等内容。 1. HTTP协议原理:HTTP协议是一种无状态、基于请求与...

    光模块的协议总结介绍

    ### 光模块的协议总结介绍 #### 一、光模块的组织和协议 光模块作为现代网络通信系统中的核心部件之一,在数据传输过程中扮演着至关重要的角色。为了确保光模块能够在不同的应用场景下实现高效的数据传输,一系列...

Global site tag (gtag.js) - Google Analytics