如何在urllib3的POST请求中向Rails服务器发送列表字段?
解决Rails服务器表单列表参数的提交问题
你遇到的核心问题是Rails对表单列表参数的解析规则:它需要接收多个以[]结尾的同名参数(比如from[]=a、from[]=b),但urllib3的fields参数用字典时无法定义重复键,这时改用列表形式的字段集合就能解决。
修改后的代码
import urllib3 import json http = urllib3.PoolManager() file_path = 'file.png' with open(file_path, 'rb') as fp: file_data = fp.read() # 用列表替代字典,每个元素是(字段名, 值)的元组,支持重复字段名 payload = [ ('from[]', 'a'), ('from[]', 'b'), ('from[]', 'c'), ('file', ('file.png', file_data)), ] r = http.request( 'POST', 'http://httpbin.org/post', fields=payload ) print(json.loads(r.data.decode('utf-8')))
原理说明
urllib3的request方法中,fields参数不仅支持字典,还支持列表格式的元组集合。每个元组对应一个独立的表单字段,这样就能重复定义相同的字段名(比如from[]),完全匹配Rails服务器对列表参数的解析逻辑。
提交后,Rails会自动把所有from[]参数收集为一个列表['a', 'b', 'c'],同时也能正常接收上传的文件。
内容的提问来源于stack exchange,提问作者PaReeOhNos
相关产品推荐
相关产品推荐

