codecamp

httpx SSL证书

通过 HTTPS 发出请求时,HTTPX 需要验证所请求主机的身份。为此,它使用由受信任的证书颁发机构 (CA) 提供的 SSL 证书捆绑包(也称为 CA 捆绑包)。

更改验证默认值

默认情况下,HTTPX 使用 Certifi 提供的 CA 捆绑包。在大多数情况下,这是您想要的,即使某些高级情况可能要求您使用一组不同的证书。

如果要使用自定义 CA 捆绑包,可以使用​verify​参数。

import httpx

r = httpx.get("https://example.org", verify="path/to/client.pem")

或者,也可以使用标准库 ​ssl.SSLContext ​。

>>> import ssl
>>> import httpx
>>> context = ssl.create_default_context()
>>> context.load_verify_locations(cafile="/tmp/client.pem")
>>> httpx.get('https://example.org', verify=context)
<Response [200 OK]>

我们还包含一个帮助程序函数,用于创建正确配置的​SSLContext​实例。

>>> context = httpx.create_ssl_context()

create_ssl_context​函数接受与 ​httpx.Client​或​httpx.AsyncClient ​相同的 SSL 配置参数集(​trust_env​、​verify​、​cert​和​http2​参数)

>>> import httpx
>>> context = httpx.create_ssl_context(verify="/tmp/client.pem")
>>> httpx.get('https://example.org', verify=context)
<Response [200 OK]>

或者您也可以完全禁用SSL验证,这是不推荐的。

import httpx

r = httpx.get("https://example.org", verify=False)

Client实例上的 SSL 配置

如果您使用的是 Client()实例,则应在实例化客户端时传递任何 SSL 设置。

client = httpx.Client(verify=False) 

client.get(...)​方法和其他请求方法不支持基于每个请求更改 SSL 设置。如果在不同情况下需要不同的 SSL 设置,则应使用多个​Client​实例,每个​Client​实例具有不同的设置。然后,每个​Client​将在该池中的所有连接上使用具有特定固定 SSL 配置的独立连接池。

客户端证书

您还可以指定要用作客户端证书的本地证书,可以是 SSL 证书文件的路径,也可以是两元组(证书文件、密钥文件),也可以是三元组(证书文件、密钥文件、密码)

import httpx

r = httpx.get("https://example.org", cert="path/to/client.pem")

或者

>>> cert = ("path/to/client.pem", "path/to/client.key")
>>> httpx.get("https://example.org", cert=cert)
<Response [200 OK]>

>>> cert = ("path/to/client.pem", "path/to/client.key", "password")
>>> httpx.get("https://example.org", cert=cert)
<Response [200 OK]>

向本地服务器发出 HTTPS 请求

向本地服务器(如 ​localhost​ 上运行的开发服务器)发出请求时,通常会使用未加密的 HTTP 连接。

如果确实需要与本地服务器建立 HTTPS 连接(例如,测试仅 HTTPS 服务情况),则需要创建并使用自己的证书。这是一种方法:

  1. 使用 trustme-cli 生成一对服务器密钥/证书文件和一个客户端证书文件。
  2. 启动本地服务器时传递服务器密钥/证书文件。(这取决于您使用的特定 Web 服务器。例如,Uvicorn 提供了​--ssl-keyfile​ 和 ​--ssl-certfile​选项。
  3. 告诉 HTTPX 使用存储在​client.pem​ 中的证书:
>>> import httpx
>>> r = httpx.get("https://localhost:8000", verify="/tmp/client.pem")
>>> r
Response <200 OK>


httpx 自定义身份验证
httpx 自定义传输
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }