前言
众所周知,微信项目html5界面的开发时间会相对较长(为什么这么说就不解释了),以及在微信浏览器内会出现一些无法在web端检测出的问题,笔者有了模拟微信浏览器的想法,google之后,发现有方法来伪装浏览器,也就是利用浏览器的user Agent,(每款浏览器都有自己不同的user Agent ,而且通过user Agent可以判断浏览器版本、所用的操作系统等参数,当用户通过浏览器向服务器发起请求时,请求头(header)中就会包含User Agent,服务器端可以获取该值)。
插件下载:
笔者以火狐为例来详解如何模拟微信浏览器:
安装成功后可在工具选项中看到Default User Agent选项,如下图:
获取微信浏览器的 User Agent
经笔者的测试,MicroMessenger 是微信浏览器特定的标识,所以上图中的if语句即可判断请求是否为微信浏览器发起。
注意一下上图中的agent,下文中要用到
搭建微信浏览器
笔者用自己的GT-I9300获取的agent为:Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.2.380
打开Default User Agent下的
添加新的user agent
将user agent切换为刚建的GT-9300 进行测试:
自己比较一下www.baidu.com原来的样子,如图算是添加成功了。
模拟微信浏览器请求
这是笔者之前所用的方法,基本作用跟前文差不多,希望对各位有所帮助
1 package sedion.wq.MonitorWechattest;
2
3 import org.apache.http.HttpEntity;
4 import org.apache.http.HttpResponse;
5 import org.apache.http.HttpStatus;
6 import org.apache.http.client.HttpClient;
7 import org.apache.http.client.methods.HttpGet;
8 import org.apache.http.impl.client.DefaultHttpClient;
9 import org.apache.http.util.EntityUtils;
10
11 /**
12 * 模拟微信浏览器请求
13 */
14 public class MonitorWechatBrowser {
15 public static void main(String[] args) {
16 String url = "http://www.where is your need.com";
17 String userAgent="Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; GT-I9300 Build/JZO54K) "+
18 "AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.2.380";
19 String html = getHttpClientHtml(url, "UTF-8");
20 System.out.println(html);
21 }
22
23
24 /**
25 * 根据URL获得所有的html信息
26 */
27 public static String getHttpClientHtml(String url,String code,String userAgent) {
28 String html = null;
29 HttpClient httpClient = new DefaultHttpClient();// 创建httpClient对象
30 HttpGet httpget = new HttpGet(url);// 以get方式请求该URL
31 httpget.setHeader("User-Agent",userAgent );
32 try {
33 // 得到responce对象
34 HttpResponse responce = httpClient.execute(httpget);
35 // 返回码
36 int returnCode = responce.getStatusLine().getStatusCode();
37 // 是200证明正常 其他就不对
38 if (returnCode== HttpStatus.SC_OK) {
39 // 获得相应实体
40 HttpEntity entity = responce.getEntity();
41 if (entity != null) {
42 html = new String(EntityUtils.toString(entity));// 获得html源代码
43 }
44 }
45 } catch (Exception e) {
46 System.out.println("出现出现异常");
47 e.printStackTrace();
48 } finally {
49 httpClient.getConnectionManager().shutdown();
50 }
51 return html;
52 }
53 }