java 获取微信公众号文章 使用搜狗微信搜索

mac2024-03-15  27

1.搜索需要SNUID 获取方法

 // 获取snuid (因为sunid有时间和访问次数限制建议每次自动查询数据时更新一次) PHPSESSID IPLOC   public String getSnuid() {     CloseableHttpClient httpClient = null;     CookieStore cookieStore = null;     String url = "https://www.sogou.com/web?query=333&_asf=www.sogou.com&_ast=1488955851&w=01019900&p=40040100&ie=utf8&from=index-nologin";     int timeout = 30000;     String snuid = null;     try {       cookieStore = new BasicCookieStore();       HttpClientContext context = HttpClientContext.create();       context.setCookieStore(cookieStore);       RequestConfig globalConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();       httpClient = HttpClients.custom().setDefaultRequestConfig(globalConfig).setDefaultCookieStore(cookieStore).build();       HttpGet httpGet = new HttpGet(url);       httpGet.setConfig(RequestConfig.custom().setSocketTimeout(timeout).setConnectTimeout(timeout).build());       httpGet.setHeader("Cookie",           "ABTEST=0|1488956269|v17;IPLOC=CN3301;SUID=E9DA81B7290B940A0000000058BFAB6D;PHPSESSID=rfrcqafv5v74hbgpt98ah20vf3;SUIR=1488956269");       httpClient.execute(httpGet);       for (Cookie c : cookieStore.getCookies()) {         if (c.getName().equals("SNUID")) {           snuid = c.getValue();         }       }     }     catch (Exception e) {       e.printStackTrace();     }     return snuid;

  }

2.通过fiddler 分析出访问需要header 部分 其中注意Cookie 部分必须要有SUV SNUID 这两个  

   我自己使用的是 HttpClients  模拟浏览器访问 

  Referer 可以通过fiddler 查看其中的值,并填入。

      httpGet.setHeader("Host", "weixin.sogou.com");       httpGet.setHeader("Connection", "keep-alive");       httpGet.setHeader("Upgrade-Insecure-Requests", "1");       httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36");       httpGet.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");       httpGet.setHeader("Referer", refererUrl);       httpGet.setHeader("Accept-Encoding", "gzip, deflate, br");       httpGet.setHeader("Cookie", "SUV=11F4A14A78A4DE3D5DB948F0493C5371;SNUID=" + SNUID + ";");       httpGet.setHeader("Accept-Language", "zh-CN,zh;q=0.9,ja;q=0.8,en;q=0.7");

      HttpResponse response = httpClient.execute(httpGet);

以上可以回去到如下图部分的网页

3.查看页面源码发现标题的链接是这样的

这是如果直接点击右边部分的链接会直接出现

通过fiddler 可以发现Cookie 中没有 SUV 和 SNUID  而且 原来的Url 跳转链接的最后多了点内容 类似于 &k=*&h=*  (*代表任意的一个值)

通过分析js 源码 并按照其规则 使用java 代码写出了可以访问的Url

  // 解析微信文章url 动态添加 k 和 h   public String createUrl(String url) {     double b = Math.floor(100 * Math.random()) + 1;     int newB = (new Double(b)).intValue();     int a = url.indexOf("url=");     int c = url.indexOf("&k=");     if (-1 != a && -1 == c) {       int temp = a + 4 + 21 + newB;       String tempA = url.substring(temp);       String newA = tempA.substring(0, 1);       System.out.println(newA);       url += "&k=" + newB + "&h=" + newA;     }     return url;   }

这时我们就可以使用上面的url 访问   不要忘记添加header 

查看返回的内容为

这个url 就是我们的最终跳转的网址。

注: 因为搜狗微信的 搜索工具 功能暂时下线了 所以到的文章是搜狗微信的默认规则。

最新回复(0)