OPHONE获得USER AGENT[权威解决方案]
2010-08-24 14:38
106 查看
论坛里有几个人发了一些代码,如何获得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】)
结果如下图:
ophone.png
(6 KB)
ophone ua
2010-08-24 14:09
以上就是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;
}
}
原理:
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】)
结果如下图:
ophone.png
(6 KB)
ophone ua
2010-08-24 14:09
以上就是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;
}
}
相关文章推荐
- 【转】Ubuntu “无法获得锁\加锁”解决方案
- Windows Azure 客户真实案例:交互式解决方案提供商获得了敏捷性,通过托管服务节省了成本
- 关于“因为数据库正在使用,所以无法获得对数据库的独占访问权”的最终解决方案
- Ubuntu学习篇:关于“无法获得锁 /var/lib/dpkg/lock - open”的解决方案
- 关于“因为数据库正在使用,所以无法获得对数据库的独占访问权”的最终解决方案
- 解决方案--duilib中edit获得鼠标焦点后右边框被覆盖
- Ubuntu “无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archives/lock – open (11 资源临时不可用)
- Windows Azure 客户真实案例:交互式解决方案提供商获得了敏捷性,通过托管服务节省了成本
- hibernate设置延迟加载后获得关联对象报错的解决方案
- android HOME、back(按钮、事件)截取获得,综合解决方案和分析,包含android4.0系统
- Java web项目中,通过get方式传中文参数时,获得的参数为乱码的解决方案
- 还原数据库出错:”因为数据库正在使用,所以无法获得对数据库的独占访问权“的解决方案
- 解决方案--duilib中edit获得鼠标焦点后右边框被覆盖
- 在Ubuntu终端中使用安装命令Sudo apt-get install xxx时时出现E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)的错误解决方案
- SQL Server 2012 新建数据库错误“无法获得数据库 'model' 上的排他锁”解决方案
- 经常在网上搜怎样获得外网的ip,代码几乎都一样,但测试,都出现错误!最后找了一个既蠢既笨的终极解决方案
- Windows Azure 客户真实案例:交互式解决方案提供商获得了敏捷性,通过托管服务节省了成本
- php中ajax请求无法获得返回值以及页面头部出现回车空格解决方案
- Windows Azure 客户真实案例:交互式解决方案提供商获得了敏捷性,通过托管服务节省了成本
- Windows Azure 客户真实案例:交互式解决方案提供商获得了敏捷性,通过托管服务节省了成本