一、UrlEncodedFormEntity
//设置请求方式与参数
URI uri = new URI(uriStr);
HttpPost httpPost = new HttpPost(uri);
httpPost.getParams().setParameter("http.socket.timeout", new Integer(500000));
httpPost.setHeader("Content-type", "text/plain; charset=UTF-8");
httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
httpPost.setHeader("IConnection", "close");
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
nvps.add(new BasicNameValuePair("KEY1", "VALUE1"));
//...
httpPost.setEntity(new UrlEncodedFormEntity(nvps));
//执行请求
HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter("Content-Encoding", "UTF-8");
HttpResponse response = httpclient.execute(httpPost);
//获取返回
HttpEntity entity = response.getEntity();
BufferedReader in = new BufferedReader(new InputStreamReader(entity.getContent(), "UTF-8"));
StringBuffer buffer = new StringBuffer();
String line = null;
while ((line = in.readLine()) != null) {
buffer.append(line);
}
return buffer.toString();
使用 UrlEncodedFormEntity 来设置 body,消息体内容类似于“KEY1=VALUE1&KEY2=VALUE2&…”这种形式,服务端接收以后也要依据这种协议形式做处理。
二、StringEntity
有时候我们不想使用上述格式来传值,而是想使用json格式来设置body,就可以使用这个类的实例。
JSONObject jsonObject = new JSONObject();
jsonObject.put("KEY1", "VALUE1");
jsonObject.put("KEY2", "VALUE2");
httpPost.setEntity(new StringEntity(jsonObject.toString()));
HttpClient发送Post请求:StringEntity 和 UrlEncodedFormEntity
一. json简介
JSON是一种取代XML的数据结构,和XML相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度。
JSON就是一串字符串 只不过元素会使用特定的符号标注。
a. {} 双括号表示对象
b. [] 中括号表示数组
c. “” 双引号内是属性或值
d. : 冒号表示后者是前者的值(这个值可以是字符串、数字、也可以是另一个数组或对象)
所以 {“name”: “Michael”} 可以理解为是一个包含name为Michael的对象。而[{“name”: “Michael”},{“name”: “Jerry”}]就表示包含两个对象的数组。当然了,可以使用{“name”:[“Michael”,“Jerry”]}来简化,这是一个拥有一个name数组的对象。
JSON格式数据的优点:
A.数据格式比较简单,易于读写,格式都是压缩的,占用带宽小,是非常轻量级的数据格式;
B.易于解析,客户端JavaScript可以简单的通过eval()进行JSON数据的读取;
C.支持多种语言,其中在Java端有丰富的工具操作和解析JSON;
D.因为JSON格式能直接为服务器端代码使用,大大简化了服务器端和客户端的代码开发量,且完成任务不变,并且易于维护;
二. JSONObject 、JSONArray
1,JSONObject
json对象,就是一个键对应一个值,使用的是大括号{ },如:{key:value}
2,JSONArray
json数组,使用中括号[ ],只不过数组里面的项也是json键值对格式的Json对象中添加的是键值对,JSONArray中添加的是Json对象
1 2 3 4 |
|
3,JSONObject与Map
Map map和json都是键值对,不同的是map中键值对中间用等号分开,json中键值对中间用冒号分开。json就是一种特殊形式的map。
1 |
|
这里的需求是:request对象获取的map,想要返回json格式也不用白费力了。
1 |
|
取出name4值过程步骤:
1,将以上字符串转换为JSONArray对象;
2,取出对象的第一项,JSONObject对象;
3,取出name1的值JSONObject对象;
4,取出name2的值JSONObject对象;
5,取出name4的值value2。
示例中json数组格式的字符串可以通过方法直接转换为JSONArray的格式:
JSONArray.fromObject(String)
JSONArray getJsonArray=JSONArray.fromObject(arrayStr);//将结果转换成JSONArray对象的形式
JSONObject getJsonObj = getJsonArray.getJSONObject(0);//获取json数组中的第一项
String result=getJsonObj.getJSONObject(“name1”).getJSONObject(“name2”).getJSONObject(“name4”);