Linux,Curl,发送不带xml文件的-X POST

时间:2018-11-15 09:16:11

标签: xml linux curl

我在Linux中有一个用于sh的-X POST的sh脚本:

curl -X POST http://serverip:8081/WebServices/WebServiceSQLTestresult.svc?wsdl -H "Content-Type: text/xml; charset="utf-8"" -H "SOAPAction: "http://tempuri.org/IWebServiceSQLTestresult/InsertPruefResultatFromXMLFile"" --data @\u\ManInTheMiddle.xml  | grep -o 'true\|false'

这很好用,但我必须先编写ManInTheMiddle.xml,然后才能发送curl命令。

ManInTheMiddle.xml

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <InsertPruefResultatFromXMLFile xmlns="http://tempuri.org/">
            <FilePath>\\serverip\script.xml</FilePath>
        </InsertPruefResultatFromXMLFile>
    </Body>
</Envelope>

有没有XML文件的方法吗?直接发送“ \ serverip \ script.xml”

喜欢:

curl -X POST http://serverip:8081/WebServices/WebServiceSQLTestresult.svc?wsdl -H "Content-Type: text/xml; charset="utf-8"" -H "SOAPAction: "http://tempuri.org/IWebServiceSQLTestresult/InsertPruefResultatFromXMLFile"" --d "\\serverip\script.xml"  | grep -o 'true\|false'

有什么想法吗?

EDIT1: 我只想使用ManInTheMiddle.xml处理中间步骤,以便服务器直接获取到导入文件(\ serverip \ script.xml)的链接。

EDIT2: 使用python可以正常工作:

url = "http://serverip/WebServices/WebServiceSQLTestresult.svc?wsdl"

import suds
import suds.client
client = suds.client.Client(url)
result = client.service.InsertPruefResultatFromXMLFile("\\\\serverip\script.xml")

谢谢...

2 个答案:

答案 0 :(得分:0)

在文件名路径前使用@:

curl -X POST http://serverip:8081/WebServices/WebServiceSQLTestresult.svc?wsdl -H "Content-Type: text/xml; charset="utf-8"" -H "SOAPAction: "http://tempuri.org/IWebServiceSQLTestresult/InsertPruefResultatFromXMLFile"" -d @"\\serverip\script.xml"  | grep -o 'true\|false'

答案 1 :(得分:0)

$()进行救援,替换

--data @\u\ManInTheMiddle.xml

使用

--data-raw "$(curl --silent \\serverip\script.xml)"

类似

curl -X POST http://serverip:8081/WebServices/WebServiceSQLTestresult.svc?wsdl -H "Content-Type: text/xml; charset="utf-8"" -H "SOAPAction: "http://tempuri.org/IWebServiceSQLTestresult/InsertPruefResultatFromXMLFile"" --data-raw "$(curl --silent \\serverip\script.xml)"  | grep -o 'true\|false'

请注意,idk如何实现$()的可移植性,例如它肯定不能在Microsoft的cmd.exe上运行,但至少可以在bash上运行