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

本文详细介绍了Android中如何配置网络代理,并提供了基于HttpURLConnection和HttpClient的代理设置方法。同时,文章还讲解了如何判断手机当前网络状态,是否需要启用代理以实现正确的网络连接。

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

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

1、HttpURLConnection设置代理

  1. //当我们使用的是中国移动的手机网络时,下面方法可以直接获取得到10.0.0.172,80端口
  2. Stringhost=android.net.Proxy.getDefaultHost();//通过andorid.net.Proxy可以获取默认的代理地址
  3. intport=android.net.Proxy.getDefaultPort();//通过andorid.net.Proxy可以获取默认的代理端口
  4. SocketAddresssa=newInetSocketAddress(host,port);
  5. //定义代理,此处的Proxy是源自java.net
  6. Proxyproxy=newProxy(java.net.Proxy.Type.HTTP,sa);
  7. URLgetUrl=newURL(“www.baidu.com”);
  8. HttpURLConnectioncon=(HttpURLConnection)getUrl.openConnection(proxy);//设置代理


2、HttpClient设置代理

  1. DefaultHttpClienthttpClient=newDefaultHttpClient();
  2. Stringhost=Proxy.getDefaultHost();//此处Proxy源自android.net
  3. intport=Proxy.getPort(context);//同上
  4. HttpHosthttpHost=newHttpHost(host,port);
  5. //设置代理
  6. httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,httpHost);
  7. HttpGethttpGet=newHttpPost("<ahref="http://www.baidu.com">www.baidu.com</a>");
  8. HttpResponseresponse=httpClient.execute(httpGet);

3、判断手机是否联网

  1. booleanisConnect(){
  2. ConnectivityManagercm=(ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
  3. if(cm!=null){
  4. returntrue;
  5. }
  6. returnfalse;
  7. }


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

  1. booleanisWifi(){
  2. ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  3. if(cm!=null){
  4. NetworkInfoni=cm.getActiveNetworkInfo();
  5. if(!ni.getTypeName().equals("WIFI")){
  6. /*
  7. *ni.getTypeNmae()可能取值如下
  8. *WIFI,表示WIFI联网
  9. *MOBILE,表示GPRS、EGPRS
  10. *3G网络没有测试过
  11. *WIFI和(E)GPRS不能共存,如果两个都打开,系统仅支持WIFI
  12. */
  13. returntrue;
  14. }
  15. }
  16. returnfalse;
  17. }


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

示例一

  1. HttpURLConnectioncon=null;
  2. URLpostUrl=newURL("www.baidu.com");
  3. booleanisProxy=false;
  4. //网络检测
  5. ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  6. booleanisProxy=false;
  7. if(cm!=null){
  8. NetworkInfoni=cm.getActiveNetworkInfo();
  9. if(ni!=null){
  10. if(!ni.getTypeName().equals("WIFI")){
  11. isProxy=true;
  12. }
  13. }
  14. }
  15. if(isProxy){
  16. Proxyproxy=newProxy(java.net.Proxy.Type.HTTP,newInetSocketAddress(android.net.Proxy.getDefaultHost(),android.net.Proxy.getDefaultPort()));
  17. con=(HttpURLConnection)postUrl.openConnection(proxy);
  18. }else{
  19. con=(HttpURLConnection)postUrl.openConnection();
  20. }


示例二

  1. DefaultHttpClienthttpClient=newDefaultHttpClient();
  2. //网络检测
  3. ConnectivityManagercm=(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  4. if(cm!=null){
  5. NetworkInfoni=cm.getActiveNetworkInfo();
  6. if(ni!=null){
  7. if(!ni.getTypeName().equals("WIFI")){
  8. //设置代理
  9. Stringhost=Proxy.getDefaultHost();
  10. intport=Proxy.getPort(context);
  11. HttpHosthttpHost=newHttpHost(host,port);
  12. httpClient.getParams().setParameter(ConnRouteParams.DEFAULT_PROXY,httpHost);
  13. }
  14. }
  15. }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值