简单的 get/post 请求在 python 3 中被阻止,但在 python 2 中则不然

2024-01-01

我正在 python 3 中开发一个简单的网络抓取工具,但是当我发送 get 或 post 请求时,响应是 403。在 python 2 中工作正常。我在两个版本中使用相同版本的请求库。我有 也尝试过Verify=False/True但两个版本的差异仍然存在。

请求= 2.22.0

证书=2019.9.11

from requests import get
url = 'https://www.gamestop.com/'
header = {
    'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'en-US,en;q=0.5',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0',
    'DNT': '1',
    'Upgrade-Insecure-Requests': '1',
    'Connection': 'keep-alive',
    'Host': 'www.gamestop.com'
}
res = get(url, headers=header, verify=False).status_code
print(res)
# 403 when using python 3.7.4
# 200 when using python 2.7.16

由@blhsing编辑:

下面的列表根据注释跟踪了哪些特定的 Python 版本可以工作以及哪些版本失败。到目前为止,跨平台的每个特定 Python 版本的成功和失败都是一致的。

请随意使用您自己的结果以及用于生成结果的特定 Python 版本来编辑问题的这一部分。

2.7.14 works (blhsing)
2.7.16 works (repl.it)
3.6.5 works (blhsing)
3.6.8 fails (Reinderien and blhsing)
3.7.3 works (wim and blhsing)
3.7.4 fails (repl.it and blhsing)
3.8.0 fails (OP)

repl.it 上的演示:Python 2.7.16 https://repl.it/@blhsing/DapperLikelyBit and Python 3.7.4 https://repl.it/@blhsing/EarlyMessyApplescript


这是 urllib3 抛出的异常:

/home/runner/.local/share/virtualenvs/python3/lib/python3.7/site-packages/urllib3/connectionpool.py:1004: InsecureRequestWarning:正在发出未经验证的 HTTPS 请求。添加 强烈建议进行证书验证。看:https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings不安全请求警告,

根据最新发行说明,第 1.25.5 节 (2019-09-19) https://pypi.org/project/urllib3/#id5:

添加 BPO-37428 的缓解措施影响 Python 1.1.1+ 导致使用 cert_reqs=CERT_NONE 时启用证书验证。 (问题 #1682)

您可以按照Github 上的问题 https://github.com/urllib3/urllib3/issues/1682,已关闭。

TLDR

Github 上的用户@sethmlarson https://github.com/sethmlarson发现这个错误urllib3:

创建_urllib3_context():

    # Enable post-handshake authentication for TLS 1.3, see GH #1634. PHA is
    # necessary for conditional client cert authentication with TLS 1.3.
    # The attribute is None for OpenSSL <= 1.1.0 or does not exist in older
    # versions of Python.
    if getattr(context, "post_handshake_auth", None) is not None:
        context.post_handshake_auth = True

将此值设置为True将启用服务器证书验证,而不是禁用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单的 get/post 请求在 python 3 中被阻止,但在 python 2 中则不然 的相关文章

随机推荐

  • pandoc 和 mathjax 遇到一些问题

    我正在尝试使用 pandoc 从包含一些乳胶的 markdown 文件生成 html 幻灯片 该文件是在github上 https raw github com rcalsaverini ThesisPresentation master
  • 在 Silverlight 中显示 GIF

    我的网络服务器上的文件夹中有许多 gif dir subdir bla gif etc 在同一台服务器上有一个 Silverlight 3 应用程序 ClientBin bla xap 有没有办法在 Silverlight 应用程序中显示
  • 禁用某些元素的 nganimate

    我正在使用 ngAnimate 模块 但是我所有的ng if ng show等 受其影响 我想利用 ngAnimate 来处理某些选定的元素 对于性能和元素中的一些错误 显示和隐藏速度非常快 thanks 如果您想为特定元素启用动画 而不是
  • WebDriverError:已断开连接:无法连接到渲染器

    Meta 操作系统 OSX 10 12 6 16G29 node modules chromedriver bin chromedriver v ChromeDriver 2 32 498537 cb2f855cbc7b82e20387ea
  • 如何确定 Neo4j 中节点内的属性值类型?

    目前 似乎没有办法确定节点 或关系 中的属性值是数组 集合还是字符串 匹配 n 其中 isArray n myprop 当尝试了解您正在使用的与更新和查询相关的数据类型时 这将非常方便 具体来说 如果您遇到这样的情况 您正在尝试更新属性值
  • 使用 With 绘图与使用 Block 绘图 (Mathematica)

    我想描述一个我一直遇到的问题Plot using With保持定义的参数 本地 我不一定要求解决 我遇到的问题是理解问题 有时我使用如下结构来获取绘图 Method 1 plot1 With vmax 10 km 10 Plot Evalu
  • C# 中的 TimeSpan 到本地化字符串

    有没有一种简单的方法 可能是内置的解决方案 来转换TimeSpan本地化字符串 例如new TimeSpan 3 5 0 将被转换为3 hours 5minutes 仅用波兰语 我当然可以创建自己的扩展 public static stri
  • 计算数据框中某列的百分比 - 按列“分组”

    我是 R 初学者 我需要能够计算数据框中值的百分比 但经常按其他列值 分组 我有一个大约 1000 行的数据框 包含媒体类型 版本 集合 年份 和计数 今年 我可以过滤它们 只获取特定的媒体 trSpdf lt trS trS Mediat
  • 同时进行多个异步回发 - ASP.NET

    说我有2个UpdatePanels在页面和每个UpdatePanel有一台服务器Button每个 当我单击第一个按钮 然后单击第二个按钮并查看 Firebug 时 我发现直到第一个按钮完成后才触发第二个异步回发 这是否按预期工作 我的理解是
  • Excel VBA打印机API,设置颜色和双面打印

    这是我的问题 我正在尝试访问打印机并更改颜色和双面设置 到目前为止 我拥有的代码允许我更改网络打印机的用户首选项 但我有以下两个问题 1 代码将打印机按预期设置为单面或双面 但未正确设置颜色首选项 2 Excel不会自动选择新设置 我仍然需
  • 如何使用 Spring security 创建自己的安全过滤器?

    我想知道是否可以使用 Spring Security API 在 Spring Web 应用程序中创建自己的安全过滤器 我想创建一个通用的安全过滤器 以便只需在 web xml 中添加该过滤器即可将其用于 插入 任何 Web 应用程序 安全
  • 如何动态分配函数代码?

    在 C 语言中 函数指针作为来自某个库的回调的通常途径是包含一个void 用户上下文的指针 void fp void ctx 允许库使用上下文调用回调ctx 假设我使用的库在回调中不包含上下文指针 我需要为每个上下文进行一个回调 在 C 中
  • Cordova Wrapper 应用程序,内部链接在应用程序中加载,外部链接在浏览器中加载

    我有一个简单的Cordova https cordova apache org 包装器应用程序指向外部网页 而不定义任何自己的视图 我想来自该域的所有内部链接都将加载到应用程序内 but 所有外部链接 http twitter com ht
  • 自定义 ostream

    我需要一些指导或指示来了解如何实现自定义 ostream 我的要求是 具有适用于多种数据类型的 目的是将输出发送到数据库 每个 行 应该进入一个单独的记录 每个记录最重要的字段是文本 或 blob 但其他一些字段 例如时间等 大多可以自动推
  • 如何在Cycle.js中顺序请求数据?

    我是响应式编程的新手 正在尝试使用cycle js 试图实现谁关注框本教程 https gist github com staltz 868e7e9bc2a7b8c1f754 但我知道 为了正确实施 和学习目的 我没有一项数据 完整的用户名
  • 使用 jquery 将类添加到父 div

    这应该相当容易 但由于某种原因我很挣扎 我有以下 html 结构 div class div div class changevid div 我想要的是当单击changevid时 应该在子内容之后添加一个名为 active 的类 my co
  • r data.table 就地连接多列

    data table是惊人的 我想进行就地联接 但保留两个表中的所有列 这个问题 https stackoverflow com questions 34598139 left join using data table 34600831演
  • MVC2 的 ASP.Net MVC Future 刷新

    随着 MVC2 的发布 MVC Futures 库的更新包含哪些值得注意的功能 MVC Futures 有两个版本与 MVC 2 RTM 并存 其中一个版本针对 NET 3 5 另一个目标是 NET 4 NET 4 版本不是 NET 3 5
  • 带返回值的 Hangfire 后台作业

    我要从Task Run https msdn microsoft com en us library hh195051 28v vs 110 29 aspx to Hangfire http docs hangfire io en late
  • 简单的 get/post 请求在 python 3 中被阻止,但在 python 2 中则不然

    我正在 python 3 中开发一个简单的网络抓取工具 但是当我发送 get 或 post 请求时 响应是 403 在 python 2 中工作正常 我在两个版本中使用相同版本的请求库 我有 也尝试过Verify False True但两个