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

如何使用requests.get方法构造指定格式的带参GET请求?

正确使用requests.get实现目标URL请求的方法

首先,你的核心问题是**dyn参数的格式处理**:目标URL里的dyn是一个用分号分隔的键值对字符串(比如VARIABLE1=blabla;VARIABLE2=blabla),但你现在把它传成了Python字典,requests会自动将字典转成dyn=VARIABLE1&dyn=VARIABLE2这种格式,和服务器要求的规则不符。

下面是修正后的完整代码:

import requests

def send(self):
    # 定义dyn对应的键值对,可根据实际需求调整内容
    dyn_data = {
        'VARIABLE1': 'blabla',
        'VARIABLE2': 'blabla'
    }
    # 把字典转换成服务器要求的分号分隔格式
    dyn_str = ';'.join([f"{key}={value}" for key, value in dyn_data.items()])
    
    # 分离URL主体和参数,更易维护
    base_url = "http://IP:PORT/api/json/v1/transfer/transferItem"
    
    for i in range(1, 8):
        try:
            self.statusBar().showMessage(f'Connecting for item {i}...')
            # 构造完整的params参数字典
            params = {
                'organisation': 'Organisation',
                'branch': '1',
                'itemnumber': str(i),
                'operation': 'U',
                'dyn': dyn_str
            }
            # 发送GET请求
            resp = requests.get(base_url, params=params)
            
            # 主动检查请求是否成功,状态码>=400时抛出异常
            resp.raise_for_status()
            self.statusBar().showMessage(f'Item {i} sent successfully')
            
        except requests.exceptions.RequestException as e:
            self.statusBar().showMessage(f'Error sending item {i}: {str(e)}')
            # 这里可以添加日志记录、重试逻辑等错误处理

关键细节说明:

  • dyn格式转换:用列表推导式把字典的键值对拼接成key=value的格式,再用分号连接,完全匹配服务器要求的dyn参数格式。
  • URL与参数分离:把固定的URL主体和动态参数分开,后续修改IP、端口或参数规则时更方便。
  • 异常处理完善:通过resp.raise_for_status()捕获HTTP错误,同时统一处理所有请求相关异常,给用户明确的状态反馈。
  • 状态提示优化:把循环的条目序号加入状态栏提示,方便跟踪当前处理的内容。

这样你的请求会生成完全符合要求的URL,比如当i=1时,最终请求URL为:

http://IP:PORT/api/json/v1/transfer/transferItem?organisation=Organisation&branch=1&itemnumber=1&operation=U&dyn=VARIABLE1=blabla;VARIABLE2=blabla

内容的提问来源于stack exchange,提问作者Andre F.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:42:06