对于携带请求参数的HttpGet与的HttpPost两种请求方式,代码段分析

时间:2021-06-19 21:11:04

HttpGet和HttpPost两种Http请求方式,两者都可以携带参数去请求服务器。


1. 实现方式:

(1) HttpGet

        将参数直接填在URL后面,以“?”隔开;参数的键和值之间用“=”隔开;不同参数的之间用“&”隔开。这样组装成一个完成的Http请求数据,比如www.baidu.com/login?userName=lambdroid&password=123456


(2) HttpPost

        将参数(以JSON格式)封装在HttpPost里面的Entity中,发送给服务器


2.实现代码段:

(1) HttpGet


    /**
* 将map中的数据格式化成服务端所需的表单String(www.baidu.com/login?userName=lambdroid&password=123456的“?”以及之后的数据)
*
* @param head
* url头部字串,一般为“?”,在表单方式中分隔URL和请求参数map
* @param map
* 请求参数map
* @return 格式化完成后的表单数据
*/
public static <K, V> String urlParamterStringer(String head, Map<K, V> map)
{
if (map == null || map.isEmpty())
{
return "";
}

int capacity = map.size() * 30; //设置表单长度30字节*N个请求参数

//参数不为空,在URL后面添加head(“?”)
StringBuilder buffer = new StringBuilder(capacity);
if (!map.isEmpty())
{
buffer.append(head);
}

//取出Map里面的请求参数,添加到表单String中。每个参数之间键值对之间用“=”连接,参数与参数之间用“&”连接
Iterator<Map.Entry<K, V>> it = map.entrySet().iterator();
while (it.hasNext())
{
Map.Entry<K, V> entry = it.next();
Object key = entry.getKey();
buffer.append(key);
buffer.append('=');
Object value = entry.getValue();
buffer.append(value);
if (it.hasNext())
{
buffer.append("&");
}
}
return buffer.toString();
}

(2) HttpPost

//代码功能:生成添加请求参数后的HttpPost对象
//参数列表:requestUrl:经过修正后的URL;value是http请求参数
//返回值:返回经过设置Entity后的HttpPost对象


public static HttpPost getJsonHttpPost(String requestUrl, Map<String, String> values)
throws UnsupportedEncodingException, JSONException
{
//根据URL,生成HttpPost对象:还未添加请求参数
HttpPost httpPost = new HttpPost(requestUrl);

//给httpPost添加http请求头部:包含Content-Type、Accept、source、COOKIE信息
configHeader(httpPost);

String jsonString = null;

//生成一个JSON格式的字符串,将http全部请求参数设置到httpPost的Entity中
if (values != null)
{
JSONStringer jsonStringer = new JSONStringer().object();

//以Set方式遍历Map数据,设置请求参数
for (Map.Entry<String, String> oneEntry : values.entrySet())
{
String key = oneEntry.getKey();
String value = oneEntry.getValue();
jsonStringer.key(key).value(value);
}
jsonStringer.endObject();

//将JSON的格式的请求参数列表,转化为字符串格式
jsonString = jsonStringer.toString();

//将该字符串设置为HttpEntity,并设置编码方式
HttpEntity entity = new StringEntity(jsonString, "UTF-8");
httpPost.setEntity(entity);
}

return httpPost;
}