zoukankan      html  css  js  c++  java
  • httpclient 中post请求重定向

    背景:使用httpclient 的post请求进行登录,需要重定向登录,请求重定向后的地址

    在httpclient中post请求不像get请求自己可以重定向,实现方式是 判断post请求返回码是否是302,如果是那么就获取传递过来的Location的地址,进行拼接,在进行一个get的请求

    实现代码

    public Map<String, String> doPost(String url, Map<String, String> map, String charset) {
    		HttpClient httpClient = null;
    		HttpPost httpPost = null;
    		String result = null;
    		String domain = "http://user.hqygou.com";
    		Map<String, String> returnmap = new HashMap<String, String>();
    		try {
    			httpClient = new SSLClient();
    			httpPost = new HttpPost(url);
    			// 设置参数
    			List<NameValuePair> list = new ArrayList<NameValuePair>();
    			Iterator iterator = map.entrySet().iterator();
    			while (iterator.hasNext()) {
    				Entry<String, String> elem = (Entry<String, String>) iterator.next();
    				list.add(new BasicNameValuePair(elem.getKey(), elem.getValue()));
    				System.out.println("请求的参数为:" + elem.getKey() + ":" + elem.getValue());
    			}
    			if (list.size() > 0) {
    				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(list, charset);
    				httpPost.setEntity(entity);
    			}
    			// 设置头部信息
    			httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    			HttpResponse response = httpClient.execute(httpPost);
    
    			if (response != null) {
    				int code = response.getStatusLine().getStatusCode();
    				System.out.println("返回的code为:" + code);
    				if (code == 302) {  #判断post的请求返回码
    					Header[] hr = response.getAllHeaders();
    					for (int i = 0; i < hr.length; i++) {
    						Header header1 = hr[i];
    						System.out.println("头部的所有内容:" + header1);
    					}
    					String hearder = response.getHeaders("Location")[0].toString().split(":")[1].trim(); #获取返回码中头部中location 就是重定向的地址
    					String redirecturl = domain + hearder;  //需要和域名进行拼接
    					System.out.println("开始重定向,地址为:" + redirecturl);
    					cookies = response.getHeaders("Set-Cookie")[0].toString().split(":")[1].trim();
    					System.out.println("获取的cookie:" + cookies);
    					cookies = cookies.split(";")[0].trim();
    					httpGet(redirecturl, cookies);  #get请求,把获取的cookie进行一个拼接
    				} else {
    					HttpEntity resEntity = response.getEntity();
    					if (resEntity != null) {
    						result = EntityUtils.toString(resEntity, charset);
    					}
    				}
    				returnmap.put("content", result);
    				returnmap.put("cookies", cookies);
    			}
    		} catch (Exception ex) {
    			ex.printStackTrace();
    		}
    		return returnmap;
    	}
    

      运行入口

    	public static void main(String[] args) {
    		test post = new test();
    		String url = "http://xxx/login/index/checklogin";
    		Map<String, String> map = new HashMap<String, String>();
    		map.put("from", "xx");
    		map.put("username", "xx");
    		map.put("password", "xx");
    		post.doPost(url, map, "UTF-8");
    	}
    

      

     注,后面这个200,是get请求时返回的内容,get请求可以查看另外一篇文章,http://www.cnblogs.com/chongyou/p/7808035.html 

  • 相关阅读:
    nth-child与nth-of-type
    改变事件绑定的this的问题
    瀑布流的一些CSS实现方式
    事件捕获与冒泡的再探
    为学
    ECharts导出word 图表模糊失真
    垂直对齐:vertical-align:super属性
    Vuex- Action的 { commit } {commit}是什么写法
    修改对象中的属性名
    echarts 角度渐变环形图心得
  • 原文地址:https://www.cnblogs.com/chongyou/p/7807986.html
Copyright © 2011-2022 走看看