0

我目前正在尝试向服务器发出 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” 证书 然后我点击“details” detailspage

然后我点击 export export DER 编码的二进制 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)

最终,这是我试图复制的客户请求

请求我正在努力实现

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

4

1 回答 1

0

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

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

于 2022-02-03T14:33:40.523 回答