用于向服务器发送许多请求并获得spical响应的bash脚本需要它

时间:2015-03-13 11:06:01

标签: xml bash curl

我想创建用于从服务器发送和获取特殊响应的脚本,我有用于发送的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)开始的序列号

并运行它以发送到服务器

表示我想发送许多请求并获得回复

2 个答案:

答案 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,请查找其他工具。