使用Laravel Guzzle按RFC 5261给XML文档打补丁报不支持媒体类型
问题原因
- 第一:RFC 5261规范定义的XML补丁请求对应的专属MIME类型是
application/xml-patch+xml,不是你使用的application/xml或text/xml,服务端会通过这个Content-Type判断你提交的是标准XML补丁内容,传错就会返回不支持的媒体类型错误。 - 第二:Guzzle的
body参数接收的是字符串类型,你现在给body传了一个数组,Guzzle无法正确序列化该内容,甚至可能自动覆盖你定义的Content-Type头,导致请求格式完全不符合预期。
修正后的代码
$this->http->patch(".../$id", [ 'headers' => [ 'Content-Type' => 'application/xml-patch+xml' ], 'body' => ' <diff> <replace sel="Registration/Status">Cancelled</replace> </diff> ', ]);
额外排查项
如果修改后还是报错,可添加debug => true参数打印完整请求日志,确认以下两点:
- Guzzle没有自动覆盖你设置的
Content-Type请求头 - 实际提交的请求体是完整的XML字符串,没有多余的数组包装或转义错误
内容的提问来源于stack exchange,提问作者Karna
相关产品推荐
相关产品推荐

