HttpClient在安卓中的应用

来源:互联网 发布:维基百科数据库 使用 编辑:程序博客网 时间:2024/05/16 18:27

本文部分图片摘自网络。

移动互联网,移动起来就要有网络传输方式

我们常见的的有get和post
get网络特点:http://httpbin.org/get?name=zhangsan&age=18
{  "args": {    "age": "18",     "name": "zhangsan"  },   "headers": {    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",     "Accept-Encoding": "gzip,deflate,sdch",     "Accept-Language": "zh-CN,zh;q=0.8",     "Host": "httpbin.org",     "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36 SE 2.X MetaSr 1.0"  },   "origin": "36.110.119.54",   "url": "http://httpbin.org/get?name=zhangsan&age=18"}
post网络特点:http://httpbin.org/post
{
  "args": {
    "atool_timestamp": "1463955068"
  }, 
  "data": "", 
  "files": {}, 
  "form": {//已经收到请求数据
    "age": "18", 
    "name": "zhangsan"
  }, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "20", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.1)"
  }, 
  "json": null, 
  "origin": "42.96.133.35", 
  "url": "http://httpbin.org/post?atool_timestamp=1463955068"
}

今天主要讲post方式,post数据形式
1.key - value形式
2.jsonString
3.file

一、key-value

DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost("http://httpbin.org/post");  
//缺少参数
HttpResponse response = httpClient.execute(post); 
if (response.getStatusLine().getStatusCode() == 200) {   
     HttpEntity resEntity = response.getEntity();             
     String result = EntityUtils.toString(resEntity);
     System.out.println("result:" + result);
} 

//设置数据
// 设置post请求的参数
List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
// 遍历map,拿到具体的参数
for (Map.Entry<String, String> info : paramsMap.entrySet()) {
     String key = info.getKey();// 参数的key
     String value = info.getValue();// 参与具体的value
     BasicNameValuePair basicNameValuePair = new BasicNameValuePair(key, value);
     parameters.add(basicNameValuePair);
   }
     HttpEntity reqEntity = new UrlEncodedFormEntity(parameters);
     post.setEntity(reqEntity);  

二、jsonString
key-value缺点是结构单一,一直put参数
jsonString结构可以无限嵌套,拼写方便

{
  "args": {
    "atool_timestamp": "1463955068"
  }, 
  "data": "", 
  "files": {}, 
  "form": {
  }, 
  "headers": {
    "Accept": "*/*", 
    "Content-Length": "20", 
    "Content-Type": "application/x-www-form-urlencoded", 
    "Host": "httpbin.org", 
    "User-Agent": "Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.1)"
  }, 
  "json":{
        “name”:zhangsan
        “age”:18
        “sex”:1
}, 
  "origin": "42.96.133.35", 
  "url": "http://httpbin.org/post?atool_timestamp=1463955068"
}


二、file文件上传
用的多不多:朋友圈上传图片,意见反馈,晒图
FileEntiy惯性思维,根据上面所学用FileEntiy传文件
httpmime-4.2.5.jar:文件上传用这个jar包
MultipartEntity这个Entity上传图片


key-value形式上传图片
键为actimg 值传一个file

MultipartEntity  上传多张图片


上传数据多种类型。那么服务器怎么知道上传数据的形式
可以人员之间约定,但这样不规范。如果不认识服务器的人员就没发预定
那么我们就用到了Content-Type,为javaWeb当中的知识

1、 服务端需要返回一段普通文本给客户端,Content-Type="text/plain"
2 、服务端需要返回一段HTML代码给客户端 ,Content-Type="text/html"
3 、服务端需要返回一段XML代码给客户端 ,Content-Type="text/xml"
4 、服务端需要返回一个file给
5 、服务端需要返回一段json串给客户端

Content-Type种类
application/x-www-form-urlencoded:表单,key-value
mutipart/form-data:二进制,file
text/plain:普通文本,默认类型
application/json:json数据,***注意有好多服务器默认是json,但要手动加上
手动加一个application/json。
有可能一次copy一个网络请求代码就能通了。
但有的服务器默认text/plain。你传json过去了,就会报json解析异常
有的大公司就判断Content-Type类型,如果类型不对就报错


模拟请求工具


http://www.atool.org/httptest.php



工具,chrom浏览器postman插件。火狐浏览器:restclient
不想在浏览器上用,feddler。可以抓包,可以模拟数据发送

原创粉丝点击