欢迎光临散文网 会员登陆 & 注册

【记录】使用curl模拟浏览器请求绕过检测。

2023-02-24 09:11 作者:Guestc  | 我要投稿

事情是这样的,之前给别人写的一个单子,爬数据的请求给检测到了。

当时我还是用的C# 自带Httpwebrequest 来请求的。

但是,我封装的请求本身没有异常,放到Postman来请求可以通过,所有觉得是更底层的东西被检测,期间我更是用三种抓包软件来代理,发现一样的数据,在fiddler和charles是不通过,而在mitmproxy则能通。后来又通过wireshark,来分析了两者的不同,发现是在tls那块不同,

也就是 cipher suite(密钥套件)长度不一样,这玩意我也第一次接触,问题是找到了。

C#的Httpwebrequest 短时间我是不知道怎么处理cipher suite了,花了些时间找合适的http库,找到了一个大佬们经常用的curl。我自己用也是第一次,开始是先在cmd测试,我用最新的windows版本(7.87.0)也不通过,但是换成(7.70.0)就通过,当时还没想着改ciphers。

库是找到了,当时就蠢着直接封装cmd执行请求然后返回结果。没跑多久就爆了,无奈之下只能去用libcurl,之前是想着封装一下libcurl,结果刚起头就觉得太麻烦不弄了。

最终在GitHub上找到了一个现成的(https://github.com/stil/CurlThin),不过因为有点旧的原因,并不能直接跑起来。

会报错->访问保护的内存。

解决方法:

原代码:[DllImport(LIBCURL, EntryPoint = "curl_easy_getinfo")]

修改后:[DllImport(LIBCURL, EntryPoint = "curl_easy_getinfo", CallingConvention = CallingConvention.Cdecl)]

能用libcurl后,跑了2天又噶了。

我就在想我用同一个ciphers是不是给抓特征了,于是乎整了一大堆,每次请求随机组合。虽然又行了,但没多久就有噶了。

这次沉下心来查资料,果然还是给我找到了,在GitHub上找到一个以curl为基础,完全模拟浏览器请求的项目(https://github.com/lwthiker/curl-impersonate)。

仔细看了,发现每个浏览器的ciphers都不同,但都是固定,我就拿了chrome的ciphers,能在原生libcurl改的参数都改了。好在到现在还没噶,等噶了再说吧。


【记录】使用curl模拟浏览器请求绕过检测。的评论 (共 条)

分享到微博请遵守国家法律