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

如何用Python Requests发送带无命名参数的Anel电源插座HTTP请求

解决Anel电源插座管理器的Requests请求问题

Anel设备的URL参数格式较为特殊,要求在URL中附带无命名的userpassword参数,常规params字典传参方式无法满足(Requests会自动为参数添加键名)。以下两种实现方式无需手动拼接完整URL,同时适配设备的三种参数格式:

方法一:利用PreparedRequest构造请求

通过Requests的PreparedRequest可灵活控制URL查询参数部分,直接构造符合要求的查询字符串:

import requests

base_url = "http://192.168.0.244"
# 定义基础操作参数和无命名密码参数
params_list = ["Stat", "userpassword"]
# 拼接查询字符串
query_string = "&".join(params_list)
# 构造并发送请求
req = requests.Request('GET', f"{base_url}?{query_string}")
prepped = req.prepare()
with requests.Session() as sess:
    response = sess.send(prepped)

方法二:封装自定义请求函数

如果需要复用这种参数格式,可以封装函数统一处理命名/无命名参数:

import requests
from urllib.parse import urlencode

def send_anel_request(base_url, named_params=None, unnamed_params=None):
    query_parts = []
    # 处理带键名的参数(如param=value)
    if named_params:
        query_parts.append(urlencode(named_params))
    # 处理无命名参数(如userpassword)
    if unnamed_params:
        query_parts.extend(unnamed_params)
    # 拼接生成完整URL
    query_string = "&".join(query_parts)
    full_url = f"{base_url}?{query_string}" if query_string else base_url
    return requests.get(full_url)

# 示例1:获取设备状态
response = send_anel_request(
    "http://192.168.0.244",
    unnamed_params=["Stat", "userpassword"]
)

# 示例2:设置参数+密码
response = send_anel_request(
    "http://192.168.0.244",
    named_params={"Set": "1"},
    unnamed_params=["userpassword"]
)

# 示例3:逗号分隔格式(把密码融入命名参数值)
response = send_anel_request(
    "http://192.168.0.244",
    named_params={"Set": "1,userpassword"}
)

以上方式既规避了硬编码URL的弊端,又完美适配设备支持的三种参数格式。

内容的提问来源于stack exchange,提问作者Wör Du Schnaffzig

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 12:43:16