• android为HttpClient和HttpURLConnection添加中国移动代理


     

         在android中,一般需要联网的时候前,都要做一次网络的判断,判断当前的网络状态!然后开始请求网络

         当我们使用wap网络的时候,程序中必须要中国移动代理!这样的话,手机才能正常的访问internet!

         在android中,有两种方式请求网络:HttpURLConnection和HttpClient请求方式,如果网络状态为wap的时候,都要为两种请求添加中国移动代理的!
         第一种方式:HttpURLConnection
         

    	/**
    	 * @author spring sky
    	 * Email vipa1888@163.com
    	 * QQ:840950105 My name:石明政
    	 * 使用HttpURLConnection请求Internet
    	 * @param context   context对象
    	 * @param requestUrl  请求的URL
    	 * @param param   请求的参数
    	 * @return  返回一个inputstream流
    	 */
    	public static InputStream getHttpURLConnectionInputStream(Context context,String requestUrl,Map<String, String> param) {
    		
    		URL url;
    		HttpURLConnection conn = null;
    		InputStream input = null;
    		try {
    			url = new URL(requestUrl);
    			if(getAPNType(context)==NetWorkUtil.CMWAP)   //当请求的网络为wap的时候,就需要添加中国移动代理
    			{
    				Proxy proxy = new Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress("10.0.0.172", 80));
    				conn = (HttpURLConnection) url.openConnection(proxy);
    			}else{
       				 conn = url.openConnection();
      			}			
    				conn.setConnectTimeout(10000);    //请求超时
    				conn.setRequestMethod("POST");  //请求方式
    				conn.setReadTimeout(1000);   //读取超时
    				conn.setDoOutput(true);
    				conn.setDoInput(true);
    				conn.setUseCaches(false);
    		        conn.setRequestProperty("Charset", "UTF-8");
    		        conn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
    				OutputStream os = conn.getOutputStream();    
    				StringBuilder sb = new StringBuilder();
    				Iterator<String> it = param.keySet().iterator();
    				while (it.hasNext()) {
    					String key = it.next();
    					String value = param.get(key);
    					sb.append(key).append("=").append(value).append("&");
    				}
    				String p = sb.toString().substring(0, sb.length()-1);
    				System.out.println("请求的参数"+p);
    		        os.write(p.getBytes("utf-8"));
    		        os.close();
    		        if(conn!=null)
    		        {
    		        	input = conn.getInputStream();
    		        }
    			
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return input;
    	}


     


    上面这种方式就是HttpURLConnection ,这种方式在android开发中也是比较常用的,希望朋友们也要熟悉的掌握!

           第二种方式:HttpClient

    	/**
    	 * @author spring sky
    	 * Email vipa1888@163.com
    	 * QQ:840950105 My name :石明政
    	 * 使用HttpURLConnection请求Internet
    	 * @param context   context对象
    	 * @param requestUrl  请求的URL
    	 * @param param   请求的参数
    	 * @return  返回一个inputstream流
    	 */
    	public static InputStream getHttpClientInputStream(Context context,String requestUrl, Map<String, String> param)throws Exception {
    		HttpClient client = new DefaultHttpClient();
    		if(getAPNType(context)==NetWorkUtil.CMWAP)  //当请求的网络为wap的时候,就需要添加中国移动代理
    		{ 
    			HttpHost proxy = new HttpHost("10.0.0.172", 80);
    			client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY,
    					proxy);
    		}
    		HttpPost hp = new HttpPost(requestUrl);
    		hp.setHeader("Charset", "UTF-8");
    		hp.setHeader("Content-Type", "application/x-www-form-urlencoded");
    		List<BasicNameValuePair> list = new ArrayList<BasicNameValuePair>();
    		
    		Iterator<String> it = param.keySet().iterator();
    		while (it.hasNext()) {
    			String key = it.next();
    			list.add(new BasicNameValuePair(key, param.get(key)));
    		}
    		hp.setEntity(new UrlEncodedFormEntity(list,"UTF-8"));
    		HttpResponse response = null;
    		response = client.execute(hp);
    		return response.getEntity().getContent();
    	}

    这个httpClient实现了android内置的DefaultHttpClient,所以使用起来还是很方便的!

    但是我发现HttpClient 比HttpURLConnection 要好一些,因为HttpURLConnection 如果使用wap在上网请求的时候,存在很多问题的(我是深有体会的,比如请求无响应,信号不好都可能造成一些未知的错误)

         好了,熟悉掌握了两种请求方式了,android的联网应用就可以开发了!呵呵 微笑

  • 相关阅读:
    Fitness
    【代码优化】Unity查漏补缺
    Fitness
    MonoBehaviour生命周期与对象数据池应用
    Fitness
    点、向量、方向在局部与世界坐标系转换的对比
    在企业运营中的感触
    技术杂想2015年夏天
    Heimich manoeuvre 海姆利克氏操作
    徒手CPR心脏复苏
  • 原文地址:https://www.cnblogs.com/springskyhome/p/3689956.html
Copyright © 2020-2023  润新知