含rcp.xml的HTTP Basic认证请求报401错误的解决咨询
解决HTTP Basic Auth访问带问号URL返回401的问题
问题核心原因
你手动在URL末尾添加的?是多余的,也是触发401错误的关键:
- requests库会自动处理查询参数的拼接逻辑,当你传入
params参数时,它会自动在URL路径后添加?并拼接键值对 - 当你写
http://10.1.0.100/rcp.xml?时,服务器会把rcp.xml?当作一个完整的资源路径(而非rcp.xml加空查询参数),这个路径大概率不在服务器的认证白名单内,或者根本不存在,因此返回401
解决方案
直接去掉URL末尾的?,让requests自动处理参数拼接即可:
PARAMS = { 'command': '0x09A5', 'direction': 'WRITE', 'type': 'P_OCTET', 'payload': '0x810006011303802c' } auth = HTTPBasicAuth('user', 'pw') # 移除URL末尾的? r = requests.get('http://10.1.0.100/rcp.xml', auth=auth, params=PARAMS)
验证步骤
可以先单独测试不带参数的rcp.xml路径是否能正常通过认证:
auth = HTTPBasicAuth('user', 'pw') r = requests.get('http://10.1.0.100/rcp.xml', auth=auth)
如果这个请求返回正常,就确认是末尾?的问题;如果还是401,可能服务器对rcp.xml路径有特殊认证规则,需要检查服务器配置或确认凭证是否匹配。
关于CGI的疑问
不需要通过CGI实现,这只是请求URL格式构造错误导致的问题,和CGI无关。
内容的提问来源于stack exchange,提问作者Stylo
相关产品推荐
相关产品推荐

