随笔-348  评论-598  文章-0  trackbacks-0

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; 
            } 
       
  }


---------------------------------------------------------
专注移动开发

Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2010-08-24 15:17 TiGERTiAN 阅读(704) 评论(0)  编辑  收藏 所属分类: Android

只有注册用户登录后才能发表评论。


网站导航: