【问题标题】:What's the difference between HTTPX and requests module in python that is causing this error导致此错误的python中的HTTPX和请求模块有什么区别
【发布时间】:2022-06-23 17:56:29
【问题描述】:

不多说,我正在向某个 url 发送请求。一个 HTTP 客户端返回 403,一个成功。标题没有区别。还有什么不同?

>>> print(httpx.get(url).status_code)
200
>>> print(requests.get(url).status_code)
403

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python http python-requests


【解决方案1】:

我的猜测是该网站正在阻止来自请求库的请求。

这怎么可能?

对于每个请求,您都会留下fingerprint 的设备。此指纹以及其他信息包含user-agent

当您使用请求库进行请求时,默认用户代理值设置为“python-requests/2.28.0”之类的值,而对于 httpx 库,它类似于“python-httpx/0.23.0”。

根据您的指纹网站中包含的信息,您可能会选择以不同于其他人的方式处理您的请求。例如返回错误页面而不是真实内容。

但是为什么呢?

Python 经常用于web scraping,requests 是比较流行的库之一。许多人会选择在他们的项目中使用它。正因为如此,许多网站选择不为使用“python-requests/*”用户代理的请求提供真实内容。

由于处理请求需要花钱,因此网站试图仅向真实的人提供内容,而不是 bots。与真人相比,机器人流量也往往更大。虽然有些人只是想禁止第三方以他们不喜欢或不知道的方式使用他们的内容。

Httpx 库也在做同样的事情,但它不像 requests 库那样广为人知,因此您会发现更多的网站没有阻止此类请求。

是否可以绕过阻塞?

是的,有很多关于该主题的在线资源。只需搜索“避免请求阻塞”之类的内容。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 2019-09-21
    • 2011-03-01
    • 1970-01-01
    • 2016-04-23
    • 2023-03-28
    • 2010-10-17
    • 2019-12-15
    相关资源
    最近更新 更多