Android网络请求详解,从HTTP协议到httpUrlConnection

HTTP协议:

HTTP协议定义了浏览器怎样向服务器请求文档,以及服务器怎样将文档传给服务器,从层次角度来看,HTTP是面向应用层的协议,它是万维网能够可靠的交换文件的基础.


HTTP协议的工作流程:

1)首先客户机与服务器需要建立连接,只要单击某个超级连接,HTTP的工作就开始了.

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源定位符(URL),协议版本号,后面是MIME信息包括请求修饰符,客户机信息和可能的内容.

3)服务器接收到请求后,给予相应的响应信息,其状态为一个状态行,包括信息的协议版本号,一个成功或错误标识的代码,后面是MIME信息,实体信息和可能的内容.

4)客户端接收服务器所返回的信息,通过浏览器显示在用户的显示屏上,然后客户机与服务器断开.


URL:

URL统一资源定位符,也被称为网页地址.


URL的格式由下列三部分组成:

第一部分是协议(或称为服务方式)http://

第二部分是存有该资源的主机IP地址(有时包含端口号,互联网中默认端口号为80)

第三部分是主机资源的具体地址,如目录和文件名等.


TCP/IP的三次握手:

SYN(synchronous)是TCP/IP建立连接时使用的握手信号,在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN信息,服务器使用SYN+ACK应答表示接收到了这个消息,最后客户机再以ACK消息响应,这样客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递.

ACK(acknowledgement),即确认字符,在数据通信中,接收站发给发送站的一种传输类控制符,表示发来的数据已准确接收无误.


HTTP协议的特点:

1.支持客户/服务器模式

2.简单快速:客户向服务器请求服务时,只需传送请求方法到路径,请求方法常用的又GET,POST,UPLOAD,每种方法规定了客户与服务器联系的类型不同,由于HTTP协议简单,使得HTTP服务器的程序规模小,因而传输速度很快.

3.灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由CONTENT-TYPE加以标记.

4.无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方法可以节省传输时间.

5.无状态:HTTP协议是无状态协议,无状态是指协议对于事务处理是没有记忆能力的,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传输的数据量较大,另一方面,在服务器不需要先前信息时它的应答较快.


HttpURLConnection使用步骤:

1.利用服务器地址创建一个URL.

2.创建一个HttpUrlConnection实例,通过httpUrl.openConnection()

3.设置一些连接属性,请求方式,连接响应最大时长,doInput,doOutput;

4.如果是post方式请求,可以通过HttpUrlConnection获取一个outPutStream,并在outPutStream中调用out.write()传递相应的数据,最后调用out.flush()将输出流中数据输出,关闭输出流.

5.获取服务器的返回值,可以通过HttpUrlConnection.getInputStream()获取服务器返回的数据(事实上,在getInputStream时才真正开始向服务器发送数据)

6.建立一个buffer,调用InputStram.read()将InputStream中的数据放到buffer中,然后将buffer中的数据写到一个outStream中,最后将outStream转化为二进制数据.

7.传送给服务器的中文可能会出现乱码,可以使用URLEncoder方法来将中文转码,而Android中的编码方式为utf-8,所以使用post可以不用转码.


HttpClient的请求步骤(GET):

1.创建HttpClient httpGet = new HttpGet(URL);

2.创建HttpClient对象HttpClient client = new DefaultHttpClient();

3.获取相应信息HttpResponse reponse = client.execute(httpGet);

4.解析响应信息,String content = EntityUtils.toString(response.getEntity());


HttpClient的请求步骤(POST):

1.创建HttpPost对象,HttpPost httpPost = new HttpPost(URL);

2.创建一个list<NameValuePair>用于保存请求参数,ArrayList<NameValuePair>,然后调用list.add(new BasicNameValuePair(Key,Value));添加请求参数

3.使用httpPost.setEntity(new UrlEncodedFormEntity(list))设置请求的content.

4.HttpResponse reponse = client.execute(httpPost);获取返回的数据


Json格式定义:

Json简单说就是javaScript中的对象和数组,所以这两张结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构.

1.对象:对象在Json中表示为"{}"中的内容,数据结构为{key:value,key:value,.....}的键值对结构,在面向对象的语言中,key为对象的属性,value为对应属性值,所以很容易理解.

2.数组数组在Json结构中用中括号"[]"表示,数据结构为["java":"javaScript","C":"C++",....]


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值