搜狗微信反爬虫机制探讨及应对方法

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sinat_23069795/article/details/89888507

      最近项目中,由于需要从微信公众号中获取一些文章内容,所以用到了搜狗微信。一旦搜索的次数稍微多一点,就会触发搜狗微信的反爬虫机制,最初是需要加上User-Agent请求头,后来是要求输入验证码,现在输入验证码之后,竟然偶尔还会报502,导致爬虫极不稳定。搜狗微信的反爬虫机制一直在更新,特别是最近的一次更新,更让人一时半会儿摸不着头脑,也是花费了好一会儿时间进行了突破。

      下面是对探索过程的记录。

       首先参考了以下博客:

       https://blog.csdn.net/weixin_33905756/article/details/86956972

       博主的探索过程,建议在他的博客中直接进行查看,这里我关注的是他说的关于Cookie的部分。

       博主认为请求时,SUIDSUVSNUID最为重要,我在谷歌浏览器中看到以下Cookie

       除了两个SUID和SUV这三个Cookie,我对Cookie进行了逐个剔除,并重新进行查询,发现其他Cookie都是可以自动生成的。而且不会报502,也不会触发验证码页面。

       由于Java中使用Connection.headers(Map<String, String> cookies)方法,会导致第一个SUID被第二个覆盖掉(虽然我当时确实添加了两个SUID),请求也是正常的,所以,我进一步提除了第一个SUID,发现刷新页面,也没有问题。

       红框之外的Cookie都会自动生成,也没有触发验证码。只有当我剔除SUV时,才会触发验证码机制,从而让输入验证码:

       所以,目前为止,需要带上的Cookie只有SUV!

那么,SUV这个Cookie如何获取呢?

        一般来说,通过请求搜狗微信网站,然后获取到Cookie,作为自己的Cookie使用,但是无疑会增加请求。当时同事有个大胆的想法,说试试能不能直接传一个32位字符串呢?也真是脑洞大开!这里很自然地就想到了UUID,然后将UUID产生的32位字符串转大写。

        想着搜狗微信不至于做的这么傻吧?但还是试了试,没想到还真的通过了,而且请求还比较稳定。

 

综上,处理办法是——在请求搜狗微信时,生成一个名为SUV的Cookie,请求时加上即可。

UUID的生成方法网上有很多,这里不再赘述,注意去掉字符串中的短横线!

祝大家好运!

 

参考博客:

https://blog.csdn.net/weixin_33905756/article/details/86956972

 

 

 

展开阅读全文

没有更多推荐了,返回首页