【问题标题】:python-requests how to send cipher name/http2python-requests 如何发送密码名/http2
【发布时间】:2021-05-15 22:17:21
【问题描述】:

我正在尝试通过 python-requests 复制以下客户端请求。

在客户端连接下,我看到 HTTP 版本为 2.0,TLS 版本为 1.3,据我所知,我知道请求使用 TLS 1.3。到目前为止,我的请求都失败了。

我想知道我是否需要通过证书。我想了解这个请求与普通请求有何不同,就像

r = requests.get('someurl')

如何使用请求来使用请求中显示的确切客户端连接?我不完全理解每个指针,我将如何使用带有特定密码名称的 h2 ALPN/?我并不期待这个问题得到一个可靠的答案,而是一个解释会更有帮助!

【问题讨论】:

  • 使用您从使用请求中获得的错误消息更新您的问题

标签: python ssl python-requests http2


【解决方案1】:

python-requests 不支持 HTTP 2 请求。您可以使用httpx 包。

HTTPX 是 Python 3 的全功能 HTTP 客户端,提供同步和异步 API,并支持 HTTP/1.1HTTP /2.

示例


import ssl
import httpx

# create an ssl context
ssl_context = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS)
# ssl.PROTOCOL_TLS - Selects the highest protocol version that both the client and server support.
# Despite the name, this option can select both "SSL" and "TLS" protocols.

# set protocol to use
ssl_context.set_alpn_protocols(["h2"])

CIPHERS = 'ECDH+AESGCM:ECDH+CHACHA20:DH+AESGCM:DH+CHACHA20:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+HIGH:DH+HIGH:RSA+AESGCM:RSA+AES:RSA+HIGH:!aNULL:!eNULL:!MD5:!3DES'

# set ciphers
ssl_context.set_ciphers(CIPHERS)

# httpx verify param lets you pass a standard library ssl.SSLContext
response  = httpx.get('https://example.com', verify=ssl_context)

print(response.http_version)
# outputs HTTP/2

除了使用ssl.SSLContext,您还可以使用httpx.create_ssl_context() 来设置ssl 上下文。

【讨论】:

    【解决方案2】:

    据我所知python-requests 是一个目前1不支持HTTP/2.0的库。这个question has been answered here

    但是有像Python httpx这样的python库支持HTTP/2.0

    亲切的问候,


    1 2021 年 2 月 16 日

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2014-07-12
      • 2012-05-08
      • 2017-12-09
      • 1970-01-01
      • 2014-04-29
      • 1970-01-01
      • 2022-11-15
      • 2018-09-10
      相关资源
      最近更新 更多