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

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;
    }



  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值