4.网络编程

HTTP网络编程

网络接口文档

用来描述客户端和服务端的数据交互

Http的格式规范

  1. 请求部分

请求消息行:定义请求类型,请求的地址,http的版本号

请求消息头:定义请求的消息头

请求消息内容实体:消息的内容实体

POST http://www.baidu.com/ur/submit/urreward HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Content-Length: 412
Origin: http://www.baidu.com
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Accept: */*
Referer: http://www.baidu.com/s?wd=http%E5%8D%8F%E8%AE%AE&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=0&rsv_pq=9ee40013000089f5&rsv_t=0ac4SWMebVX5TjRmjHHyNHdDixuCh%2FcpmFz8tPkwfArEbHonfYesWFV64Rr4%2F7VNDDnn&inputT=16437
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8
Cookie: BAIDUID=BECE0B98C5D5A8EA4C5A93221901CC58:FG=1; BAIDUPSID=BECE0B98C5D5A8EA4C5A93221901CC58; BDUSS=l1MmM3MEVEclRYR1RZc1ZJTnBDb2RBUTY1YktTUFc0a2pBYVlHNkxOZDk4N0JVQVFBQUFBJCQAAAAAAAAAAAEAAABoRLMjd2FuZ2Rha2U4ODgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH1miVR9ZolUVm; cflag=65535%3A2; BD_HOME=1; BD_UPN=12314353; BDRCVFR[feWj1Vr5u3D]=I67x6TjHwwYf0; H_PS_645EC=ed505mET4I1deA3bYtMtRU3uR2cJjax8rhNPHTOm8z3DRr81YiRxdAGu2EkNN9FfIu%2Fm; BD_CK_SAM=1; BDSVRTM=89; H_PS_PSSID=8342_4398_10161_1461_10624_10571_10213_10500_10497_10016_10511_10644_10052_10459_10066_10219_9769_10463_10355_9094_10095_10008_10443_10460_10415_10360_9024_10627

bsToken=b22dd64be5811ede7970782c338fdead&asyn=1&info=pid%3Dse%26method%3Dsearch%26query%3Dhttp%25E5%258D%258F%25E8%25AE%25AE%2Fpid%3Daladdin%26resourceid%3D91%26fetchkey%3Dhttp%2525E5%25258D%25258F%2525E8%2525AE%2525AE%26method%3Dsearch%26query%3Dhttp%25E5%258D%258F%25E8%25AE%25AE%2Fpid%3Daladdin%26resourceid%3D1527%26fetchkey%3D%26method%3Dsearch%26query%3Dhttp%25E5%258D%258F%25E8%25AE%25AE&se=utf-8&ge=utf-8
  1. 响应部分

响应状态行:定义响应的状态码

响应内容头:定义响应的消息头

响应内容实体:响应的内容实体

HTTP/1.1 200 OK
Cache-Control: private
Date: Sun, 14 Dec 2014 14:41:34 GMT
Expires: Sun, 14 Dec 2014 14:41:34 GMT
Content-type: text/html
Vary: Accept-Encoding
Content-Encoding: gzip
Transfer-Encoding: chunked
Server: BWS/1.0
Connection: Keep-Alive

网络调试工具的使用

  1. 工具介绍: Fiddler2

    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件,这些都可以让你胡乱修改的意思)。 Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式.

  2. 模拟请求发送

    1. 找到软件右侧的Composer选项卡,选中
    2. 选中请求方式 (GET,POST)
    3. 填写请求URL
    4. 如果是post请求,在Request body中添加请求参数,并且添加请求头Content-Type: application/x-www-form-urlencoded
    5. 如果是get请求,在URL中添加参数
    6. 点击Excute执行请求
  3. 查看网络数据返回

    1. 选中左侧发送的请求
    2. 选中右侧的Inspectors选项卡
    3. 查看下侧的Raw选项卡,查看返回结果

Http 异步请求的封装

  1. 什么场景用异步任务

    处理耗时操作的时候用到异步任务,否则andorid 会抛出ANR(application not response)错误

  2. 为什么要用到回调

    在处理异步任务的时候,结果由子线程获得,此时需要将结果给到主线程。因此在主线程中调用异步任务时需要设置回调

  3. 开发过程中UI控制层访问网络最关心的是什么

    UI控制层访问网络的目的是为了获得网络返回数据,UI层最关心返回的数据结果;在java开发中,一切皆有面向对象的思想,数据即是对象,UI层拿到Object最为合适。

  4. 如何为UI控制层封装好网络请求

    异步 + 回调 + 接口文档规范

http 后台任务

后台任务是处理 及时性不高的任务,不需要耗用太多资源去做网络请求,UI也不是很关心数据返回

  1. 通常应用程序只会给到一个线程去处理所有的后台任务
  2. 后台任务需要按照一定的格式归档存储
  3. 通过IntentService的方式运行后台任务
  4. IntentService

    IntentService是Service类的子类,用来处理异步请求。客户端可以通过startService(Intent)方法传递请求给IntentService。

    1. 必须实现一个无参数构造函数
    2. onHandleIntent()运行在子线程中
    3. 如果IntentService 被start了多次,onHandleIntent()方法将排队执行多次。
原文地址:https://www.cnblogs.com/sixrain/p/5188142.html