本文部分图片摘自网络。
移动互联网,移动起来就要有网络传输方式
我们常见的的有get和post
{ "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);
二、j
sonString
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串给客户端
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。可以抓包,可以模拟数据发送