You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

自动化项目中循环发送多请求仅执行首个方法的修复咨询

修复循环仅发送第一个请求的问题

嘿,我仔细看了你的代码和问题描述,这个循环只发第一个请求的问题,大概率和你传递文件对象给requests.post的方式有关,尤其是第二个文件比较大的情况下。

问题根源分析

你在with代码块里打开文件后,直接把methodBody这个文件对象传给了requests.postdata参数。对于1KB的小文件来说,requests可能会在with块结束(文件自动关闭)前就完成读取和发送,但8KB的文件虽然不算特别大,却可能因为with块执行完毕后文件被提前关闭,导致requests还没完成内容读取,最终请求发送失败。而且你的代码没有任何错误捕获逻辑,所以第二个请求失败了你也看不到具体问题。

修复方案

解决思路很简单:先把文件内容读取到内存变量里,再把变量传给data参数,彻底避开文件关闭时机的影响。修改后的代码如下:

cargoType = input('Enter a cargo type (CargoRedirection): ')
cargoGuid = input('Enter a cargoGuid: ')
methods = ['method1', 'method2'] # methods here are coming from filenames in a folder ./methods
for method in methods:
    file_path = f'./methods/{cargoType}/{method}.xml'
    with open(file_path, 'rb') as methodBody:
        # 先读取文件全部内容到内存变量
        body_content = methodBody.read()
    
    headers = {
        'Content-Type': 'application/xml',
        'Queue': 'Queue1',
        'Message-Type': method,
        'Branch': 'Branch1'
    }
    
    print(method)
    try:
        r = requests.post('url', data=body_content, headers=headers)
        # 新增状态码打印,快速判断请求是否成功
        print(f"{method} was sent, status code: {r.status_code}")
        # 可选:打印响应文本,排查服务端返回的具体信息
        # print(r.text)
    except Exception as e:
        # 捕获异常,明确出错原因
        print(f"Failed to send {method}: {str(e)}")

额外建议

  • 异常捕获:加入try-except后,能直接看到请求失败的具体原因(比如文件不存在、网络超时等),比盲目猜测更高效。
  • 状态码检查:通过HTTP状态码可以快速判断请求是否成功(200-299为成功,400系列是客户端错误,500系列是服务端错误)。
  • 路径验证:虽然你推测是文件大小问题,但还是可以确认下第二个文件的路径是否正确、程序有没有读取权限。

内容的提问来源于stack exchange,提问作者Klevtsov Andrey

火山引擎 最新活动