如何用Python将用户输入的账号密码放入POST请求的Authorization头?
解决方案
你的问题核心是服务器要求HTTP Basic认证,而非直接接收请求头里的username和password字段。Basic认证的规则是:将用户名和密码用冒号拼接后做Base64编码,再放入格式为Basic <编码字符串>的Authorization请求头中。下面提供两种可行的修复方案:
方案1:使用requests自带的auth参数(推荐)
requests库内置了Basic认证处理逻辑,直接传入auth=(username, password)即可自动生成正确的Authorization头,无需手动编码:
import requests import urllib3 import getpass urllib3.disable_warnings() url = "https://127.0.0.1" # Python3请替换raw_input为input username = raw_input("Enter the username: ") password = getpass.getpass() payload = "relevance=(members of computer group whose (name = \"ABC\") of computers)" headers = { 'Content-Type': 'application/xml', } # 关键:添加auth参数,requests自动处理Basic认证 response = requests.post(url, verify=False, headers=headers, data=payload, auth=(username, password)) print(response) print(response.text) # 可打印响应内容排查问题
方案2:手动构造Authorization头
如果需要手动控制认证头的生成,可以自己完成Base64编码:
import requests import urllib3 import getpass import base64 urllib3.disable_warnings() url = "https://127.0.0.1" username = raw_input("Enter the username: ") password = getpass.getpass() payload = "relevance=(members of computer group whose (name = \"ABC\") of computers)" # 拼接用户名密码并做Base64编码 auth_bytes = f"{username}:{password}".encode('utf-8') base64_auth = base64.b64encode(auth_bytes).decode('utf-8') headers = { 'Authorization': f'Basic {base64_auth}', 'Content-Type': 'application/xml', } # 注意:payload需通过data参数传递(原代码的payload参数是错误的) response = requests.post(url, verify=False, headers=headers, data=payload) print(response) print(response.text)
额外注意点
- 原代码中
requests.post的payload参数是错误的,应使用data参数传递表单/文本类型的请求体。 - 若使用Python3,需将
raw_input()替换为input()。
内容的提问来源于stack exchange,提问作者jenhenry
相关产品推荐
相关产品推荐

