文章目录
curl 可以访问但是requests 就返回安全验证(百度搜索页面)
!!方法具有时效性!!
curl转requests工具:https://curlconverter.com/
python版本:Python 3.10.5
curl 版本:curl 7.83.1 (Windows) libcurl/7.83.1 Schannel
在浏览器的开发者工具中,使用了cUrl(cmd),在windows上可以访问页面,但是使用工具转换为requests的访问,就会返回百度的图片安全验证。
解决方法: 将www.baidu.com 换为解析到的IP即可。(少量的请求,并且忽略认证verify=False
)
url='https://39.156.66.14/s?ie=utf-8&f=8&rsv_bp=1&rs...'
response = requests.get(url, headers=headers,allow_redirects=False,timeout=5,verify=False,)
或者使用http
url='http://www.baidu.com/s?....'
挣扎历程
无聊而又挣扎的历程
刚开始以为自己转换的工具有问题,就curl -v … 参数对照了一下。都是一样的。难道底层不一样,可是又不会呀。唉,接着百度这个百度的问题。
看到几个令人印象深刻的答案。
- 服务器屏蔽了python 库中的请求,但是没有屏蔽curl请求
- 也看到了有人再用深度学习去破解图片安全验证。(完全知识盲区,虽然很感兴趣)
然后后面都是漫无目的换各种出现的情况,各种关键词,各种可能的原因 去搜。结果都是石沉大海。
很久很久的疲惫时间感过去了,也没有一点思绪。就去微博上,吐槽这个问题好难。 结果,结果来了大佬。说ua不一样。我一想,参数都一样,ua都指定了呀。怎么会不一样呢。不管了,先回一波疑问。然后自己再搞搞。
刚刚开始搞起来,发现自己就像是撞了墙。刚感觉结果要出来,欸!!突然发现,复制了带有用户登陆的那个cookie。
再来!! 以为刚要成功,结果就发现cookie中有klter(好像是这名字,有他也能正常访问)。不行 得换个浏览器。
ok这次应该都可以了吧!!欸欸欸!成功了,成功了!!
但真的是这样吗!当然不是啊!!忘记关掉重定向了!!返回值当然是
200
。唉,已经感觉不到累了。此处得出结论,脑袋糊涂,干活就不顺。
接
第二天打算抓包看看吧。虽然说只听说过抓包,自己还没用过。下了Wireshark 不能解析命令行和requests发出的https包。然后又下了fidder ,然后一顿百度,一顿曲折的操作。
刚开始发现解析的ip不一样,就直接把域名换成了ip
两个一试,都可以。但是脑袋中还有疑问,为什么域名就不行呢。当两个解析到域名的IP都相同时,requests还是不行。
然后用fidder抓包 curl 指定了代理。也开启了系统的代理。这个时候神奇的事情出现了。
request 和curl 都可以了。
结果发现:
确实ua不一样 但是是在发起tunnel的时候
curl的
CONNECT www.baidu.com:443 HTTP/1.1 Host: www.baidu.com:443 User-Agent: curl/7.83.1 Connection: Keep-Alive
requests的:
CONNECT www.baidu.com:443 HTTP/1.0 Host: www.baidu.com:443
一看不一样还挺多的。。
然后 目前没有然后了,不会改呀,网上少啊,试了一个不行呀
试的这一个https://www.jianshu.com/p/691fd8408dc4
然后 抓包结果 没有变
然后睡了一觉~
一觉醒来,好了累了,就先用IP顶着吧。
【完】
简要总结
抓包查看了他们的数据,刚开始。这两解析的ip不一样,以为是ip的问题,就把www.baidu.com 换成了curl解析到的ip。结果可以!!一阵欢呼。
但是转念一想,用另一个ip是不是也可以。