Robot Framework带文件的POST请求报400错误,求问题排查
问题分析与修复方案
核心问题点
错误的Content-Type设置
你手动设置了拼写错误的Content-Type=applicaion/json(正确应为application/json),但接口实际需要multipart/form-data格式(Postman用form-data成功就是证明)。发送带文件的请求时,RequestsLibrary会自动生成正确的multipart/form-data头部,手动指定application/json会导致服务器无法解析请求体,返回400。参数传递方式冲突
POST On Session同时使用json和files参数是错误的。发送form-data请求时,普通字段(title、isPrivate等)应放在data参数里,而非json参数——json参数会把数据序列化为JSON格式,和form-data格式不兼容。文件参数格式不规范
Get File For Streaming Upload返回的是文件流对象,构建文件字典时,需按(文件名, 文件对象, 媒体类型)的元组格式传递,才能让服务器正确识别文件信息。
修复后的代码
Post request with a Image File # 移除手动设置的Content-Type,让库自动处理multipart/form-data ${POST_HEADER}= Create Dictionary Authorization=Bearer ${token} # 普通字段存入data用的字典 ${org_post_body}= Create Dictionary title=Test Robot Post isPrivate=true ... description=Test Robot Post Description associationType=${assn_typ1} ... associationId=${org_id} # 获取文件流并构建标准文件参数格式 ${img_file}= Get File For Streaming Upload ${CURDIR}\\pic1.jpg ${file}= Create Dictionary files=('pic1.jpg', ${img_file}, 'image/jpeg') # 用data传递普通字段,files传递文件 ${resp}= POST On Session host_server /api/post/ headers=${POST_HEADER} data=${org_post_body} files=${file} Status Should Be 200 ${resp}
额外说明
- 文件媒体类型(MIME type)可根据实际文件类型调整:jpg用
image/jpeg,png用image/png,显式指定比自动推断更稳妥。 - Robot Framework中路径的反斜杠需转义为
\\,或直接使用正斜杠/,避免路径解析错误。
内容的提问来源于stack exchange,提问作者Lakshmi
相关产品推荐
相关产品推荐

