Android通过HttpURLConnection与HttpClient联网代理网关设置

本文介绍了Android系统中使用HttpURLConnection和HttpClient进行联网时如何设置代理,特别是在移动网络(如CMWAP)环境下。首先,通过android.net.Proxy获取默认代理地址和端口,然后在HttpURLConnection和HttpClient中设置代理。同时,提供了检测网络连接状态和类型的代码示例,确保在非WIFI网络下正确使用代理进行联网操作。
摘要由CSDN通过智能技术生成

  Android联网主要使用HttpURLConneciton和HttpClient进行联网,在手机联网的时候,我们优先选择wifi网络,其次在选择移动网络,这里所述移动网络主要指cmwap。

大家都知道cmwap连接需要设置代理地址和端口,那么,android程序中如何设置代理呢?

1、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);//设置代理


2、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("www.baidu.com");
HttpResponse response=httpClient.execute(httpGet);

3、判断手机是否联网

boolean isConnect(){
	ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
	if(cm!=null){
		return true;
	}
	return false;
}


4、判断当前网络是否为WIFI

boolean isWifi(){
	ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
	if(cm!=null){
		NetworkInfo  ni = cm.getActiveNetworkInfo();
		if(!ni.getTypeName().equals("WIFI")){
			/*
			 * ni.getTypeNmae()可能取值如下
			 * WIFI,表示WIFI联网
			 * MOBILE,表示GPRS、EGPRS
			 * 3G网络没有测试过
			 * WIFI和(E)GPRS不能共存,如果两个都打开,系统仅支持WIFI
			 */
			return true;
		}
	}
	return false;
}


 综合判断网络类型,我们便可以确定是否需要设置代理,实现正确的联网。

示例一

HttpURLConnection con =null;
URL postUrl = new URL("www.baidu.com");
boolean isProxy=false;
//网络检测
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
boolean isProxy=false;
if(cm!=null){
	NetworkInfo  ni = cm.getActiveNetworkInfo();
	if(ni!=null){
		if(! ni.getTypeName().equals("WIFI")){
			isProxy=true;
		}
	}
}
if(isProxy){
	Proxy proxy=new Proxy(java.net.Proxy.Type.HTTP,new InetSocketAddress(android.net.Proxy.getDefaultHost(),android.net.Proxy.getDefaultPort()));
	con = (HttpURLConnection) postUrl.openConnection(proxy);
}else{
	con = (HttpURLConnection) postUrl.openConnection();
}


示例二

DefaultHttpClient httpClient=new DefaultHttpClient();
//网络检测
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm!=null){
	NetworkInfo  ni = cm.getActiveNetworkInfo();
	if(ni!=null){
		if(!ni.getTypeName().equals("WIFI")){
			//设置代理
			String host=Proxy.getDefaultHost();
			int port = Proxy.getPort(context);  
			HttpHost httpHost = new HttpHost(host, port); 
			httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,httpHost);
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xxpr_ybgg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值