Android 经典笔记之八:网络请求数据基础介绍
2017-11-10 00:00
441 查看
关于网络请求数据总结
1.Http请求与响应
1.1 Http请求包的结构
1.2 HTTP响应包结构
2.Http请求方式
3.Get和Post的比较
3.1 get请求
3.2 post请求
3.3 其他区别
3.4 网络心声
4.Http响应方式
5.同步和异步
6.Http缓存机制讲解
6.1 request请求字段含义
6.2 response响应字段含义
6.3 缓存机制逻辑图
0.本人写的综合案例
案例
说明及截图
模块:新闻,音乐,视频,图片,唐诗宋词,快递,天气,记事本,阅读器等等
接口:七牛,阿里云,天行,干货集中营,极速数据,追书神器等等
1.Http请求与响应
一次请求就是向目标服务器发送一串文本。什么样的文本?有下面结构的文本。
1.1 HTTP请求包结构
![](https://yq.aliyun.com/uploads/userup/10585/1G109201946-2417-0.png)
例子:
![](https://yq.aliyun.com/uploads/userup/10585/1G109201946-F49-1.png)
例子:
![](https://yq.aliyun.com/uploads/userup/10585/1G109201946-4143-2.png)
3.Get和Post的比较区别
3.1 get请求
在url中填写参数
我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光了。
目录介绍1.Http请求与响应
1.1 Http请求包的结构
1.2 HTTP响应包结构
2.Http请求方式
3.Get和Post的比较
3.1 get请求
3.2 post请求
3.3 其他区别
3.4 网络心声
4.Http响应方式
5.同步和异步
6.Http缓存机制讲解
6.1 request请求字段含义
6.2 response响应字段含义
6.3 缓存机制逻辑图
0.本人写的综合案例
案例
说明及截图
模块:新闻,音乐,视频,图片,唐诗宋词,快递,天气,记事本,阅读器等等
接口:七牛,阿里云,天行,干货集中营,极速数据,追书神器等等
1.Http请求与响应
一次请求就是向目标服务器发送一串文本。什么样的文本?有下面结构的文本。
1.1 HTTP请求包结构
![](https://yq.aliyun.com/uploads/userup/10585/1G109201946-2417-0.png)
例子:
POST /meme.php/home/user/login HTTP/1.1 Host: 114.215.86.90 Cache-Control: no-cache Postman-Token: bd243d6b-da03-902f-0a2c-8e9377f6f6ed Content-Type: application/x-www-form-urlencoded tel=13637829200&password=123456请求了就会收到响应包(如果对面存在HTTP服务器) 1.2 HTTP响应包结构
![](https://yq.aliyun.com/uploads/userup/10585/1G109201946-F49-1.png)
例子:
HTTP/1.1 200 OK Date: Sat, 02 Jan 2016 13:20:55 GMT Server: Apache/2.4.6 (CentOS) PHP/5.6.14 X-Powered-By: PHP/5.6.14 Content-Length: 78 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: application/json; charset=utf-8 {"status":202,"info":"u6b64u7528u6237u4e0du5b58u5728uff01","data":null}2.Http请求方式
![](https://yq.aliyun.com/uploads/userup/10585/1G109201946-4143-2.png)
3.Get和Post的比较区别
3.1 get请求
在url中填写参数
http://xxxx.xx.com/xx.php?params1=value1¶ms2=value2 https://api.douban.com/v2/book/search?tag=文学&start=0&count=30[/code]
甚至使用路由http://xxxx.xx.com/xxx/value1/value2/value33.2 post请求
参数是经过编码放在请求体中的。 编码包括:x-www-form-urlencoded form-data
x-www-form-urlencoded的编码方式是这样:tel=13637829200&password=123456`
form-data的编码方式是这样:----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="tel" 13637829200 ----WebKitFormBoundary7MA4YWxkTrZu0gW Content-Disposition: form-data; name="password" 123456 ----WebKitFormBoundary7MA4YWxkTrZu0gW` 3.3 其他区别
因为url是存在于请求行中的。 所以Get与Post区别本质就是参数是放在**请求行**中还是放在**请求体**中。
3.4 网络心声
Get是明文,Post隐藏 >移动端不是浏览器,不用https全都是明文。 Get传递数据上限XXX 胡说。有限制的是浏览器中的url长度,不是Http协议,移动端请求无影响。Http服务器部分有限制的设置一下即可。
4.Http响应方式
请求是键值对,但返回数据我们常用Json。
对于内存中的结构数据,肯定要用数据描述语言将对象序列化成文本,再用Http传递,接收端并从文本还原成结构数据。
对象(服务器)<-->文本(Http传输)<-->对象(移动端) 。
5.同步和异步的比较
这2个概念仅存在于多线程编程中。
Android中默认只有一个主线程,也叫UI线程
因为View绘制只能在这个线程内进行。所以如果你阻塞了(某些操作使这个线程在此处运行了N秒)这个线程,这期间View绘制将不能进行,UI就会卡。所以要极力避免在UI线程进行耗时操作。网络请求是一个典型耗时操作。
5.1同步写的方式:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); NetUtils.get("http://www.baidu.com");//这行代码将执行几百毫秒 }
这就是同步方式。直接耗时操作阻塞线程直到数据接收完毕然后返回。Android不允许的。会卡死
5.2异步写的方式://在主线程new的Handler,就会在主线程进行后续处理。 private Handler handler = new Handler(); private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.text); new Thread(new Runnable() { @Override public void run() { //从网络获取数据 final String response = NetUtils.get("http://www.baidu.com"); //向Handler发送处理操作 handler.post(new Runnable() { @Override public void run() { //在UI线程更新UI textView.setText(response); } }); } }).start(); }
在子线程进行耗时操作,完成后通过Handler将更新UI的操作发送到主线程执行。这就叫异步。
抽取写法
记住: 每次都new Thread,new Handler消耗过大public class AsynNetUtils { public interface Callback{ void onResponse(String response); } public static void get(final String url, final Callback callback){ final Handler handler = new Handler(); new Thread(new Runnable() { @Override public void run() { final String response = NetUtils.get(url); handler.post(new Runnable() { @Override public void run() { callback.onResponse(response); } }); } }).start(); } public static void post(final String url, final String content, final Callback callback){ final Handler handler = new Handler(); new Thread(new Runnable() { @Override public void run() { final String response = NetUtils.post(url,content); handler.post(new Runnable() { @Override public void run() { callback.onResponse(response); } }); } }).start(); } } 这个直接调用工具类 private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = (TextView) findViewById(R.id.webview); AsynNetUtils.get("http://www.baidu.com", new AsynNetUtils.Callback() { @Override public void onResponse(String response) { textView.setText(response); } });
6.Http缓存机制讲解
缓存对于移动端是非常重要的存在。
减少请求次数,减小服务器压力.
本地数据读取速度更快,让页面不会空白几百毫秒。
在无网络的情况下提供数据。
缓存一般由服务器控制(通过某些方式可以本地控制缓存,比如向过滤器添加缓存控制信息)。通过在请求头添加下面几个字端:
6.1 request请求字段含义
6.2 response响应字段含义
6.3 缓存机制逻辑图
其他说明
知乎:https://www.zhihu.com/people/yang-chong-69-24/pins/posts
领英:https://www.linkedin.com/in/chong-yang-049216146/
简书:http://www.jianshu.com/u/b7b2c6ed9284
csdn:http://my.csdn.net/m0_37700275
网易博客:http://yangchong211.blog.163.com/
新浪博客:http://blog.sina.com.cn/786041010yc
github:https://github.com/yangchong211
喜马拉雅听书:http://www.ximalaya.com/zhubo/71989305/
脉脉:yc930211
360图书馆:http://www.360doc.com/myfiles.aspx
开源中国:https://my.oschina.net/zbj1618/blog
泡在网上的日子:http://www.jcodecraeer.com/member/content_list.php?channelid=1
邮箱:yangchong211@163.com
阿里云博客:https://yq.aliyun.com/users/article?spm=5176.100239.headeruserinfo.3.dT4bcV
了解更多http://click.aliyun.com/m/34645/
相关文章推荐
- Android 经典笔记之八:网络请求数据基础介绍
- Android 经典笔记之八:网络请求数据基础介绍
- Android 经典笔记之八:网络请求数据基础介绍
- Java基础知识强化之网络编程笔记16:Android网络通信之 使用Http的Get方式读取网络数据(基于HTTP通信技术)
- Java基础知识强化之网络编程笔记17:Android网络通信之 使用Http的Post方式读取网络数据(基于HTTP通信技术)
- Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)
- Java基础知识强化之网络编程笔记18:Android网络通信之 使用HttpClient的Post / Get 方式读取网络数据(基于HTTP通信技术)
- ANDROID笔记:基于handle的异步请求网络数据的一种方法
- 介绍Web基础架构设计原则的经典论文《架构风格与基于网络的软件架构设计》导读
- Android用httpURLConnection发送post网络请求并拿到数据
- Android下网络请求数据,返回数据显示不全,解析json no value for xxx
- android基础笔记——模板代码:SharedPreferences保存、读取数据
- android基础笔记:从网路中读取数据,并显示(Thread、handler、httpclient、XmlPullParser 、BaseAdapter)
- [android开发]天气预报项目的开发之数据接口与网络请求-1
- Android基础笔记(二)-数据存储和界面展现
- Android入门笔记 - 数据存储 - 网络
- Android网络请求与JSON解析和数据抓取小实例
- android笔记之--向网络发送GET/POST请求参数
- Android网络请求框架AsyncHttpClient (android-async-http)介绍说明
- fiddler监控抓取Android请求网络数据包使用方法教程