Robot Framework发送POST请求报Unsupported Media Type错误如何解决
问题核心原因
415 Unsupported Media Type错误本质是请求体格式和请求头声明的Content-Type不匹配,或Content-Type被库自动覆盖为无效值。
你两次写法的错误点
- 第一次写法:
Get file读取到的是JSON格式的字符串,传给data参数时,Requests库默认会将Content-Type设置为application/x-www-form-urlencoded,即便你手动指定了Content-Type也会被覆盖,最终服务端识别不到有效媒体类型。 - 第二次修改逻辑完全错误:你读取到JSON字符串后,先执行
json.dumps会把字符串再次序列化,生成带转义符的无效JSON,之后又json.loads转回字典,最终传给data参数的是Python字典,依然会被库编码为表单格式,无法匹配你设置的JSON类型请求头。
正确实现方案
方案1:使用json参数传参(官方推荐)
RequestsLibrary的POST On Session关键字提供了专门的json参数,传入Python字典时会自动序列化为JSON字符串,同时自动设置正确的Content-Type: application/json请求头,无需手动配置该头部。
Create new company ${headers} = Create Dictionary Accept=application/json # 读取JSON文件并解析为Python字典 ${json_content} = Get file create.json ${body_dict} = Evaluate json.loads($json_content) json Create Session http_session ${url} disable_warnings=${True} # 使用json参数传递请求体 ${response} = POST On Session http_session ${company} json=${body_dict} headers=${headers}
方案2:使用data参数传参
如果你坚持用data参数,直接传递读取到的原始JSON字符串即可,不要做多余的序列化/反序列化操作,手动设置的Content-Type会正常生效。
Create new company ${headers} = Create Dictionary Accept=application/json Content-Type=application/json # 直接读取JSON字符串作为请求体 ${body_str} = Get file create.json Create Session http_session ${url} disable_warnings=${True} # 传递JSON字符串给data参数 ${response} = POST On Session http_session ${company} data=${body_str} headers=${headers}
内容的提问来源于stack exchange,提问作者Beto
相关产品推荐
相关产品推荐

