我在我们的一个数据中心托管了使用spring构建的肥皂服务。当我通过SOAP UI进行测试时,我会在1秒或更短的时间内得到响应。但是,当我通过CURL运行相同的请求时,执行时间超过30秒。我正在运行来自同一台机器的两个命令。可能导致这种差异的原因是什么?
curl -H "Content-Type: text/xml; charset=utf-8" -H "SOAPAction:" -d @request.xml <endpoint>
答案 0 :(得分:3)
需要考虑的一些事项:
SOAP请求的媒体类型(Content-Type
标头字段)应为application/soap+xml
(请参阅SOAP 1.2 specs, end of section 1.3)。如果您的编码是UTF-8,请设置Content-Type: application/soap+xml; charset=UTF-8
。
您的SOAPAction
标头字段未定义,这意味着curl
根本没有发送该字段。如果您使用--trace-ascii /dev/stdout
选项运行curl
,则可以查看此内容。
按原样发送您的XML(二进制)有效负载,您可以使用--data-binary
选项,而不是-d/--data
。它将保留换行符和回车。对于不应该有任何区别的XML内容,但这可能取决于所使用的解析器和模式的严格程度。
在调试curl
请求时,将请求从httpbin等回显网站退回,以及使用-vvv
启用完整详细信息非常有用,甚至可以使用{{ 1}}检查发送/接收的确切有效载荷。
应用这些修补程序,您的--trace*
命令将如下所示:
curl