Sun*_*uni 11 python http python-requests
没什么好说的,我正在向某个网址发送请求。一台 HTTP 客户端返回 403,一台成功。标头没有区别。还有什么不同?
>>> print(httpx.get(url).status_code)
200
>>> print(requests.get(url).status_code)
403
Run Code Online (Sandbox Code Playgroud)
Sla*_*apy 11
我的猜测是该网站正在阻止来自请求库的请求。
对于每个请求,您都会留下发出请求的设备的指纹。该指纹除其他信息外还包含user-agent。
当您使用 requests 库执行请求时,默认用户代理值设置为“python-requests/2.28.0”之类的内容,而对于 httpx 库,则设置为“python-httpx/0.23.0”之类的内容。
根据您的指纹中包含的信息,网站可能会选择以不同于其他人的方式处理您的请求。例如返回错误页面而不是真实内容。
Python 经常用于网络抓取,而 requests 是更流行的库之一。很多人会选择在自己的项目中使用它。因此,许多网站选择不向使用“python-requests/*”用户代理的请求提供真实内容。
由于处理请求需要花钱,因此网站试图只向真人而不是机器人提供内容。与真人相比,机器人流量也往往要大得多。虽然有些人只是想禁止第三方以他们不喜欢或不知道的方式使用他们的内容。
Httpx 库也在做同样的事情,但它不像 requests 库那样广为人知,因此您会发现更多不阻止此类请求的网站。
是的,有很多关于该主题的在线资源。只需搜索“避免请求阻塞”之类的内容即可。
| 归档时间: |
|
| 查看次数: |
9526 次 |
| 最近记录: |