OPHONE获得USER AGENT[权威解决方案]

论坛里有几个人发了一些代码,如何获得UA,但是自己都实践过了一遍,一个都不行。最近做OPHONE的项目,跟移动终端的人打了不少交道,了解了一些相关知识,这里把权威的解决方案发布出来。 我不是方法的发明者,但是我是方法的实践者。顺便也在这里感谢相关的人。

原理:

OPHONE的UA存放位置:
1)OPHONE 1.0和1.5     存放于/opl/etc/properties.xml
1)OPHONE 2.0     存放于/opl/etc/product_properties.xml

大家可以通过下面的步骤自己查看:
1),连上手机,或者模拟器。
2),输入 adb shell
3),输入 cd opl
4),输入 cd etc
5),输入 cat properties.xml (或者cat product_properties.xml 【OPHONE2.0】)

结果如下图:



以上就是properties.xml的内容,接下来就是获得这个UA,加到自己的联网请求里去。
我自己写了一个,适用于目前3个版本的OPHONE。

AndroidPlatform.java

package com.***.****;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;


public class AndroidPlatform  {
       
        public static final String KEYSTRING_USER_AGENT = "user_agent_key";
       
        public static String getUAFromProperties()
        {
                try {
                FileInputStream is = getPropertyStream();
                ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
                        byte buf[] = new byte[1024];
                        for(int k = 0; -1 != (k = is.read(buf));)
                   bytearrayoutputstream.write(buf, 0, k);
                       
                        String fileString = new String(bytearrayoutputstream.toByteArray(), "UTF-8");
                       
                        return getProperties(KEYSTRING_USER_AGENT, fileString);
                       
                //System.out.println("IS FILE Android Platform  " + bytearrayoutputstream.size() +  "  "+());
         
                } catch (Exception e) {
                        // TODO: handle exception
                       
                        System.out.println("IS FILE erororo");
                        e.printStackTrace();
                }
                return null;
        }
       
       
       
        public static FileInputStream getPropertyStream()
        {
                try {
                       
                        File property = new java.io.File("/opl/etc/properties.xml");
                        if(property.exists())
                        {
                                return new FileInputStream(new java.io.File("/opl/etc/properties.xml"));
                        }
                        else
                        {
                                property = new java.io.File("/opl/etc/product_properties.xml");
                                if(property.exists())
                                {
                                        return new FileInputStream(new java.io.File("/opl/etc/product_properties.xml"));
                                }
                                else
                                {
                                        return null;
                                }
                        }
         
                } catch (Exception e) {
                        // TODO: handle exception
                        e.printStackTrace();
                }
                return null;
        }
       
       
        public static String getProperties(String key, String content)
        {
                String STARTKEY = "<"+key+">";
                String ENDKEY = "</"+key+">";
                content = content.replace("/r", "");
                content = content.replace("/n", "");
               
                int startIndex = content.indexOf(STARTKEY) + STARTKEY.length();
                int endIndex = content.indexOf(ENDKEY);
                if(startIndex > -1 && endIndex > -1)
                {
                        return content.substring(startIndex, endIndex);
                }
                else
                return null;
        }

       
}

联网请求时,加入UA即可,这样就做到了自动适配了。具体如下:

private int CountMoneyCMWAPNEWWAY(String urlstr)
  {

          String strHead = "";
          try{
                  if(!GameLet._self.isNetworkCMWAPAvailable())
                  {
                          GameLet._self.ActiveNetWorkByMode("wap");
                          Thread.sleep(5000);
                  }

              int splashIndex = urlstr.indexOf("/", 7);

              String hosturl = urlstr.substring(7, splashIndex);
              String hostfile = urlstr.substring(splashIndex);
             
            

              HttpHost proxy = new HttpHost( "10.0.0.172", 80, "http");
              HttpHost target = new HttpHost(hosturl, 80, "http");        
         
              HttpParams httpParams = new BasicHttpParams();
              HttpConnectionParams.setConnectionTimeout(httpParams, 20 * 1000);
              HttpConnectionParams.setSoTimeout(httpParams, 20 * 1000);
              HttpConnectionParams.setSocketBufferSize(httpParams, 8192);
              HttpClientParams.setRedirecting(httpParams, true);
         
              String userAgent =  AndroidPlatform.getUAFromProperties();
         
              HttpProtocolParams.setUserAgent(httpParams, userAgent);
              DefaultHttpClient httpclient = new DefaultHttpClient(httpParams);

              httpclient.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
               
              HttpGet req = new HttpGet(hostfile);
          
              HttpResponse rsp = httpclient.execute(target, req);
            
              HttpEntity entity = rsp.getEntity();
             
              InputStream inputstream = entity.getContent();
              ByteArrayOutputStream bytearrayoutputstream = new ByteArrayOutputStream();
              byte abyte1[] = new byte[1024];
              for(int k = 0; -1 != (k = inputstream.read(abyte1));)
                 bytearrayoutputstream.write(abyte1, 0, k);
             
              strHead = new String(bytearrayoutputstream.toByteArray(), "UTF-8");
             
              httpclient.getConnectionManager().shutdown();  
             
              }
              catch (Exception e)        {
                      return 2;
              }
              
            if(strHead.indexOf("status=1301") > -1 || strHead.indexOf("status=1300") > -1)
            {
                  return 1;
            }
            else
            {
                  return 0;
            }
      
  }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值