安卓学习笔记5——网络编程
一、HttpUrlConnection
1.请求数据:get
大致步骤:
URL url=new URL("https://www.baidu.com");
// 创建httpurlconnection对象
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setConnectTimeout(5000);
int code =conn.getResponseCode();
if (code==200){
InputStream in=conn.getInputStream();}
2.提交数据:get/post
(1)HTTP协议:查看网络连接过程中http协议内容
包含请求内容和响应内容
请求内容
- 完整的请求格式包含:请求行、头信息、请求体
-
请求行:请求中第一行信息—-包括三个部分请求方式、资源路径、HTTP协议版本
例如:GET/HTTP/1.1
HTTP请求方式有几种:POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用两种:GET、POST -
头信息:包含一些键值对,描述请求的信息
Accept:text/html,image/——-客户端可以接收文件类型text/htmlTl文件image/任意格式图片
Accept-Charset:ISO-8859-1-----客户端可以识别编码字行集
Accept-Encoding:gzip–——-客户端可以识别压缩数据格式gzip是一种压缩格式
Accept-Language:zh-cn——-客户端浏览器语高,Host:www.itcast.com:80----访问服务器地址 -
请求体:传输的数据
响应内容
(2)Post与Get方式提交数据的区别
- Get方式: url地址后携带数据有大小限制1K(http协议是4k),提交数据在url上显示;以?分隔url和参数,参数采用键值对格式,多个参数使用&符合分隔
如:http://www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD&rsv_spt=1&rsv_iqid=0xa13e92b20002bf94&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_dl=tb&rsv_enter=0
- POST 数据在请求体中,不在url上显示,没有数据大小跟制
username=zhangsan 请求体和头信息直接存在一个空行
(3)使用示例
- get
与请求数据无异,差别在于url地址 - post
conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded")
conn.setRequestProperty("Content-Length",data.length()+"");
conn.setDoOutput(true)//设置一个标记允许输出
conn.getoutputStream().write(data.getBytes());
3.乱码问题
客户端与服务器端编码方式不同
安卓默认编码方式:utf-8
对于服务器传输给客户端的数据,按照服务器的编码方式解码即可
对于传输给服务器的数据,比如中文的话,可以先惊醒urlencode
二、httpclient
开源项目,被封装到android api中
get
post
三、AsyncHttpClient
封装了子线程,handler等
get
post
四、三种方式的比较
- httpurlconnection:可以自己封装请求头信息,定制
- httpclient(了解,没有人用)
- 开源项目(asynchttpclient):通用,方便