论述Android通过HttpURLConnection与HttpClient联网代理网关设置
Android联网主要使用HttpURLConneciton和HttpClient进行联网,在手机联网的时候,我们优先选择wifi网络,其次在选择移动网络,这里所述移动网络主要指cmwap。
大家都知道cmwap连接需要设置代理地址和端口,那么,android程序中如何设置代理呢?这是个问题。
HttpURLConnection设置代理
//当我们使用的是中国移动的手机网络时,下面方法可以直接获取得到10.0.0.172,80端口
String host=android.net.Proxy.getDefaultHost();//通过andorid.net.Proxy可以获取默认的代理地址
int port =android.net.Proxy.getDefaultPort();//通过andorid.net.Proxy可以获取默认的代理端口
SocketAddress sa=new InetSocketAddress(host,port);
//定义代理,此处的Proxy是源自java.net
Proxy proxy=new Proxy(java.net.Proxy.Type.HTTP,sa);
URL getUrl = new URL(“www.baidu.com”);
HttpURLConnection con = (HttpURLConnection) getUrl.openConnection(proxy);//设置代理
HttpClient设置代理
DefaultHttpClient httpClient=new DefaultHttpClient();
String host=Proxy.getDefaultHost();//此处Proxy源自android.net
int port = Proxy.getPort(context);//同上
HttpHost httpHost = new HttpHost(host, port);
//设置代理
httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,httpHost);
HttpGet httpGet=new HttpPost("<a href="http://www.baidu.com">www.baidu.com</a>");
HttpResponse response=httpClient.execute(httpGet);
第一种方式:通过HttpURLConnection来访问
 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
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通过HttpURLConnection与HttpClient联网代理网关设置的更多相关文章
- Android 中HttpURLConnection与HttpClient的简单使用
		
1:HttpHelper.java public class HttpHelper { //1:标准的Java接口 public static String getStringFromNet1(Str ...
 - Android 网络编程之---HttpClient 与 HttpURLConnection 共用cookie
		
HttpClient 与 HttpURLConnection 共用 SessionId HttpClient 与 HttpUrlConnection 是Android 中HTTP操作最常见的訪问方式. ...
 - 转-Android联网 — HttpURLConnection和HttpClient选择哪个好?
		
http://www.ituring.com.cn/article/199619?utm_source=tuicool 在Android开发中,访问网络我们是选择HttpURLConnection还是 ...
 - [Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换
		
[Android]解决3gwap联网失败:联网请求在设置代理与直连两种方式的切换 问题现象: 碰到一个问题,UI交互表现为:联通号码在3gwap网络环境下资源一直无法下载成功. 查看Log日志,打印出 ...
 - Android HTTP请求用HttpUrlConnection与HttpClient比较
		
在安卓和JAVA应用开发中需要访问网络,少不了要提交HTTP请求,而基本上目前有两个实现方式:HttpUrlConnection(即URL.openConnection)和HttpClient. 网上 ...
 - Android入门(二十)HttpURLConnection与HttpClient
		
原文链接:http://www.orlion.ga/679/ 在 Android上发送 HTTP请求的方式一般有两种,HttpURLConnection和 HttpClient. 一.HttpURLC ...
 - Android HttpURLConnection And HttpClient
		
Google的工程师的一个博客写到: HttpURLConnection和HttpClient Volley HTTP请求时:在Android 2.3及以上版本,使用的是HttpURLConnecti ...
 - android中的HttpURLConnection和HttpClient实现app与pc数据交互
		
自学android的这几天很辛苦,但是很满足,因为每当学到一点点知识点都会觉得很开心,觉得今天是特别有意义的,可能这个就是一种莫名的热爱吧. 下面来说说今天学习的HttpURLConnection和H ...
 - android 网络编程之HttpURLConnection与HttpClient使用与封装
		
1.写在前面 大部分andriod应用需要与服务器进行数据交互,HTTP.FTP.SMTP或者是直接基于SOCKET编程都可以进行数据交互,但是HTTP必然是使用最广泛的协议. 本文并 ...
 
随机推荐
- CS1.6找金钱和人物血量
			
一.查找金钱数量 先搜索800 然后购买东西,再搜索剩下的钱 然后发现有两个地址,一个绿色的地址(也就是静态地址),还有一个动态地址 经过测试后,静态地址的值是对应屏幕上的值,而真正实际的金钱是那个动 ...
 - 解决浏览器抛出乱码,(HTML、PHP等的乱码问题)
			
在Windows上编写html或php代码的时候,本地编辑器设置的文件编码格式是utf-8保存,但是浏览器打开页面的时候经常出现乱码,而且浏览器自动检测到的页面编码为GBK格式,这时候我就开始纳闷了? ...
 - poj 3268 最短路dijkstra *
			
题目大意:给出n个点和m条边,接着是m条边,代表从牛a到牛b需要花费c时间,现在所有牛要到牛x那里去参加聚会,并且所有牛参加聚会后还要回来,给你牛x,除了牛x之外的牛,他们都有一个参加聚会并且回来的最 ...
 - Xtreme9.0 - Mr. Pippo's Pizza 数学
			
Mr. Pippo's Pizza 题目连接: https://www.hackerrank.com/contests/ieeextreme-challenges/challenges/mr-pipp ...
 - git 仓库迁移,git remote 更改源
			
git仓库迁移 我们有时候需要迁移git仓库,但又想保留每次commit的记录,所以我们只需要更改git remote [源]的问题即可 首先查看你的remote的地址 git remote -vv ...
 - c# 实现获取汉字十六进制Unicode编码字符串
			
1. 汉字转十六进制UNICODE编码字符串 /// <summary> /// //// /// </summary> /// & ...
 - 【Go命令教程】2. go build
			
go build 命令用于编译我们 指定的 源码文件 或 代码包 以及它们的依赖包. 例如,如果我们在执行 go build 命令时不后跟任何代码包,那么命令将试图编译当前目录所对应的代码包.例如, ...
 - 一步一步学习ASP.NET 5 (一)-基本概念和环境配置
			
编者语:时代在变,在csdn开博一年就发了那么的两篇文章.不管是什么原因都认为有愧了.可是今年重心都会在这里发表一些文章,和大家谈谈.NET, 移动跨平台,云计算等热门话题.希望有更好的交流. 好吧言 ...
 - 在ASP.NET MVC中通过勾选checkbox来更改select的内容
			
遇到了这样的一个需求:通过勾选checkbox来更改select的内容. 在没有勾选checkbox之前是这样的: 在勾选checkbox之后是这样的: 想通过ajax异步来实现.所以,从控制器拿到的 ...
 - SQLServer2008:在查看表记录或者修改存储过程时出现错误。错误消息为: 目录名无效
			
登陆数据库后,右键打开表提示:目录名无效,执行SQL语句也提示有错误,本来想重装的这个肯定能解决,但是这个方法真的不视为上上策啊,于是在网上找到了这个解决办法,还真是立即见效啊!分享给大家,希望有帮助 ...