使用httpx发送POST请求返回401错误,但requests请求正常,求排查
问题分析与修复方案
核心错误点
认证逻辑缺失
requests代码通过HTTPBasicAuth传递了用户名(USER)和密码(PASSWORD)完成Basic认证,但你的httpx代码仅将client_id放在data参数中,完全没有实现Basic认证逻辑,这是401未授权错误的主要原因。客户端证书参数误用
httpx中verify参数用于验证服务器的SSL证书,而客户端证书需要通过cert参数传递,你把自定义SSL上下文传给verify的做法不符合httpx的参数规范。证书文件不一致
注意到requests使用的是key2.pem,但httpx用的是key.pem,如果这两个密钥文件内容不同,也会导致客户端证书验证失败,需确认文件一致性。
修复后的httpx代码
import os import httpx from httpx import HTTPBasicAuth cert = os.path.realpath('./certs/certificate.pem') # 统一密钥文件,与requests使用的key2.pem保持一致 key = os.path.realpath('./certs/key2.pem') response = httpx.post( url=my_url, data={'client_id': os.getenv('USER', '')}, # 正确传递客户端证书 cert=(cert, key), # 添加Basic认证 auth=HTTPBasicAuth(os.getenv('USER', ''), os.getenv('PASSWORD', '')) ) token = response.json()['access_token']
内容的提问来源于stack exchange,提问作者Vishnukk
相关产品推荐
相关产品推荐

