Android通过HttpURLConnection与HttpClient联网代理网关设置
2016-06-13 11:40
585 查看
Android联网主要使用HttpURLConneciton和HttpClient进行联网,在手机联网的时候,我们优先选择wifi网络,其次在选择移动网络,这里所述移动网络主要指cmwap。
大家都知道cmwap连接需要设置代理地址和端口,那么,android程序中如何设置代理呢?
1、HttpURLConnection设置代理
[java] view
plain copy
//当我们使用的是中国移动的手机网络时,下面方法可以直接获取得到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设置代理
[java] view
plain copy
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);
3、判断手机是否联网
[java] view
plain copy
boolean isConnect(){
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm!=null){
return true;
}
return false;
}
4、判断当前网络是否为WIFI
[java] view
plain copy
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;
}
综合判断网络类型,我们便可以确定是否需要设置代理,实现正确的联网。
示例一
[java] view
plain copy
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();
}
示例二
[java] view
plain copy
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);
}
}
}
大家都知道cmwap连接需要设置代理地址和端口,那么,android程序中如何设置代理呢?
1、HttpURLConnection设置代理
[java] view
plain copy
//当我们使用的是中国移动的手机网络时,下面方法可以直接获取得到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设置代理
[java] view
plain copy
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);
3、判断手机是否联网
[java] view
plain copy
boolean isConnect(){
ConnectivityManager cm = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm!=null){
return true;
}
return false;
}
4、判断当前网络是否为WIFI
[java] view
plain copy
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;
}
综合判断网络类型,我们便可以确定是否需要设置代理,实现正确的联网。
示例一
[java] view
plain copy
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();
}
示例二
[java] view
plain copy
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);
}
}
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析