如何使用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.
相关产品推荐
相关产品推荐

