【问题标题】:HTTP/2 Python-Requests, HTTPXHTTP/2 Python 请求,HTTPX
【发布时间】:2022-02-03 22:33:40
【问题描述】:

我目前正在尝试向服务器发出 HTTP/2 请求。

我意识到在使用 HTTP/2 时我的请求失败了。 (从服务器我得到“不支持”)

python-requests 不支持 HTTP/2,所以我使用了一个围绕请求构建的包装器,称为 HTTPX,它支持 HTTP/2。

r = httpx.Client(http2=True)
data = '{"username":"'+username+'","password":"'+password+'","client_id":"someclientid","ux_id":"com.nike.commerce.snkrs.ios","grant_type":"password"}'
response = r.post('https://unite.nike.com/login', headers=self.login_header, params=params, data=data)

我的请求没有出错,但我从服务器得到“不支持”。我正在尝试向耐克公共登录后端端点提出请求,我知道他们有 akamai 等机器人检测。我的印象是它使用特殊证书,这些是我当时所做的步骤

  1. 转到 chrome 浏览器。
  2. 点击“证书” certificate 然后我点击“详情” detailspage

然后我点击导出 export DER encoded binary x.509 (CER)

假设我做的一切都正确,然后我将 .cer 转换为 .pem

openssl x509 -inform der -in exported_certificate.cer -out certificate.pem

然后我指定

export SSL_CERT_FILE='certificate.pem'

当我再次发出请求时,我收到以下错误:

httpx.ConnectError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1123)

最终,这是我要复制的客户端请求

Request I am trying to achieve

根据屏幕截图,我的 ios 设备正在使用密码名称 TLS_AES_256_GCM_SH384 发出请求,使用 TLSv1.3

【问题讨论】:

    标签: python-requests http2 httpx


    【解决方案1】:

    我假设你早就解决了这个问题,但是对于其他类似的问题,服务器的响应说 Unsupported 可能意味着服务器不支持 HTTP2。

    要通过 HTTP2 进行请愿,不仅客户端必须能够进行,而且服务器也必须积极支持 HTTP2,否则您可能会得到上述响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-21
      • 2021-03-14
      • 2021-12-29
      • 2017-06-17
      相关资源
      最近更新 更多