我想创建用于从服务器发送和获取特殊响应的脚本,我有用于发送的xml文件,其中包含我想将其发送到服务器并从服务器获得特殊响应的ID号
<Msg>No Record Found</Msg>
或
<Msg>Record Found</Msg>
现在我正在使用curl:
curl -H "Content-Type: text/xml; charset=utf-8" -d @myreq.xml "http://www.example.com/eService.asmx"
现在在myreq.xml文件中包含类似这样的内容
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<oma xmlns="http://tempuri.org/">
<id>303711</id>
</oma>
</soap:Body>
</soap:Envelope>
在id中我想使用从(000001 - 400000)开始的序列号
并运行它以发送到服务器
表示我想发送许多请求并获得回复
答案 0 :(得分:0)
如果你要做的事情超过你对xml的要求,你应该使用perl
或其他一些编程语言来进行正确的xml操作。然后你将生成整个XML文件并发布它。
在这个简单的例子中,您可以将XML的内容放在包含变量$ID
的here文档中,您可以相应地设置它,例如:
#!/bin/bash
for ID in $(seq 1 3)
do
DOC=$(cat <<EOM
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<oma xmlns="http://tempuri.org/">
<id>$ID</id>
</oma>
</soap:Body>
</soap:Envelope>
EOM
)
curl -H "Content-Type: text/xml; charset=utf-8" -d "$DOC" "http://www.example.com/eService.asmx"
done
答案 1 :(得分:0)
nlu的答案适合发送请求。对于解析响应,您don't want to grep:它将是XML,因此您应该使用XML解析工具。
这应该有效:
response=$(curl ... | xmlstarlet sel -t -v '//Msg')
case "$response" in
"No Record Found") do_something;;
"Record Found") do_something_else;;
*) echo "unexpected response from server for id $ID: $response";;
esac
如果您不喜欢或无法安装xmlstarlet,请查找其他工具。