You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:10:28