HTTP/2 Python-запросы, HTTPX

В настоящее время я пытаюсь отправить запрос 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)

Мои запросы не выдают ошибок, но с сервера я получаю сообщение «Не поддерживается». Я пытаюсь сделать запрос к конечной точке общедоступного входа в систему Nike, я понимаю, что у них есть обнаружение ботов, таких как akamai и т. Д. У меня сложилось впечатление, что он использует специальный сертификат. Это шаги, которые я тогда сделал

  1. Зашел в браузер Chrome.
  2. Нажмите кнопку «Сертификат» сертификат Затем я нажимаю «данные» detailspage

Затем я нажимаю экспорт, экспорт, двоичный код в формате 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

1 ответ

Я предполагаю, что вы давно решили эту проблему, но для других подобных проблем ответ сервера с сообщением «Не поддерживается» может означать, что сервер не поддерживает HTTP2.

Чтобы петиция могла быть отправлена ​​через HTTP2, не только клиент должен иметь возможность сделать это, но и сервер должен также активно поддерживать HTTP2, иначе вы можете получить ответ, подобный приведенному выше.

Другие вопросы по тегам