Content-Type 必须设为 application/xml 或 text/xml;application/xml 优先,禁用 charset 后缀;cURL 用 –data-binary 和 -H 指定头;Python requests 需 encode 字符串并手动设 headers。
Content-Type 必须设为 application/xml 或 text/xml
浏览器或 HTTP 客户端默认不会识别 XML 内容类型,如果漏设或错设(比如用 application/json),服务端很可能直接拒收或解析失败。多数 REST API 明确要求 Content-Type: application/xml,少数老系统接受 text/xml,但二者语义不同:application/xml 表示不可见的二进制安全格式,text/xml 暗示可被文本编辑器处理——实际中优先试 application/xml。
注意:不要加 charset 后缀(如 application/xml; charset=utf-8),除非服务端明确要求。很多 Java Spring Boot 接口反而因带 charset 导致 415 Unsupported Media Type。
cURL 发送 XML 的最小可行命令
用 curl 测试最直接,避免框架干扰。关键点是禁用表单编码、手动指定头、从文件读取或内联 XML:
curl -X POST https://www.php.cn/link/f142c6067e6345134c6728f299cf4c1e \ -H "Content-Type: application/xml" \ --data-binary @payload.xml \ -v
说明:
-
--data-binary保证原始字节发送,不转义换行或特殊字符;-d会做 URL 编码,XML 会损坏 -
@payload.xml表示读取本地文件;若内联 XML,改用单引号包裹并换行(注意 shell 对和>的解析) -
-v查看真实请求头和响应,确认Content-Type和长度是否符合预期
Python requests 发送 XML 的典型写法
requests 默认把 data 当作表单提交,必须显式传入字符串或 bytes,并控制 headers:
import requestsxml_content = """