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

Django新手求助:如何在requests请求中传递Basic认证头?

如何在Django的requests中传递Basic认证头

嘿,作为从Node/Express转Django的新手,我完全懂你想把熟悉的Axios用法迁移到requests的心情!其实requests处理Basic认证有两种很方便的方式,我给你详细拆解下:

方法1:用requests内置的HTTPBasicAuth(最推荐)

requests已经帮我们封装好了Basic认证的处理,不用手动搞Base64编码,省心又不容易出错。你只需要导入HTTPBasicAuth,然后在请求里传入用户名和密码就行:

from base64 import b64encode
import requests
import environ
from requests.auth import HTTPBasicAuth  # 新增这个导入

env = environ.Env()
environ.Env.read_env()
endpoint = 'some url'

def get_api_data():
    # 直接把用户名和密码传给HTTPBasicAuth,requests会自动生成认证头
    response = requests.get(
        endpoint,
        auth=HTTPBasicAuth(env('API_USERNAME'), env('API_PASSWORD'))
    )
    return response.json()

方法2:手动构造请求头(和你Axios的习惯一致)

如果你更习惯像Axios那样手动设置Authorization头,那需要注意headers必须是字典格式,你之前的代码把auth拼成了字符串,这是问题所在。修改后的代码如下:

from base64 import b64encode
import requests
import environ

env = environ.Env()
environ.Env.read_env()
endpoint = 'some url'
credentials = f"{env('API_USERNAME')}:{env('API_PASSWORD')}"
# 把bytes类型的编码结果转成字符串
encoded_credentials = b64encode(credentials.encode("utf-8")).decode("utf-8")
# 构造字典格式的headers
headers = {
    'Authorization': f'Basic {encoded_credentials}'
}

def get_api_data():
    # 在请求中传入headers参数
    response = requests.get(endpoint, headers=headers)
    return response.json()

额外技巧:设置全局默认认证(类似Axios的defaults)

如果你的Django服务所有请求都需要这个Basic认证,也可以像Axios设置默认头那样,给requests设置全局的认证信息:

# 方式一:全局默认auth
requests.auth = HTTPBasicAuth(env('API_USERNAME'), env('API_PASSWORD'))

# 方式二:全局默认headers
requests.headers.update({'Authorization': f'Basic {encoded_credentials}'})

设置之后,后续所有的requests.get()、requests.post()等请求都会自动带上认证信息,不用每次都传参数啦~

内容的提问来源于stack exchange,提问作者João Ramires

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:22:42