数字为100万的数组

时间:2016-07-07 23:19:32

标签: arrays soap soapui

我们使用Wizdler来获取数据。但我们必须得到大约100万人的数据。 有一种方法可以只搜索一个或多个。 我们总是在这里逐一写出ID。 我们的问题是,无论如何一次输入100万个数字? 我们还列出了所有身份证号码。是否可以输入包含所有数字的文件的链接,或者我们必须写出所有这样的数字?

<int xmlns="http://schemas.microsoft.com/Arrays">123456</int>
<int xmlns="http://schemas.microsoft.com/Arrays">654321</int>

我将所有组合保存为文本文件。看起来像那样。

0000000

0000001

0000002

0000003

等...

1 个答案:

答案 0 :(得分:1)

在该SOAP请求中无法使用指向您文件的链接。 SOAP请求必须包含您要检索的所有标识符。此外,对于该Web服务而言,可能会有一百万行太多,您需要将它们拆分为多个块。

要创建包含所有数字的SOAP请求,您可以使用命令生成所有int元素。然后,您可以使用任何文本编辑器将其包装到SOAP信封中。这将为您提供可以发送到Web服务的请求。

在Linux环境中,生成行的命令将如下所示(identifiers.txt是包含所有标识符的文件的名称,ahttp://schemas.microsoft.com/Arrays的命名空间别名必须事先定义):

awk '$0="<a:int>"$0"</a:int>"' identifiers.txt

结果如下:

<a:int>0000000</a:int>
<a:int>0000001</a:int>
<a:int>0000002</a:int>
<a:int>0000003</a:int>

您还可以生成整个请求,而不仅仅是重复的部分。以下示例假定操作名称为yourRequest,并且它位于名称空间yourNamespace中。 int元素也不包含在任何其他元素中。您必须更改此设置以符合您的方案:

awk 'BEGIN{print "<Envelope xmlns=\"http://schemas.xmlsoap.org/soap/envelope/\">\n\t<Body>\n\t\t<yourRequest xmlns=\"yourNamespace\" xmlns:a=\"http://schemas.microsoft.com/Arrays\">"}{print "\t\t\t<a:int>"$0"</a:int>"}END{print "\t\t</yourRequest>\n\t</Body>\n</Envelope>"}' identifiers.txt > request.xml

执行上一个命令后,request.xml将包含以下内容:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <yourRequest xmlns="yourNamespace" xmlns:a="http://schemas.microsoft.com/Arrays">
            <a:int>0000000</a:int>
            <a:int>0000001</a:int>
            <a:int>0000002</a:int>
            <a:int>0000003</a:int>
        </yourRequest>
    </Body>
</Envelope>

对于SOAP信封,我使用了SOAP 1.1的命名空间(http://schemas.xmlsoap.org/soap/envelope/)。如果您的服务仅了解SOAP 1.2,请相应地更改名称空间(http://www.w3.org/2003/05/soap-envelope)。

要调用Web服务,您可以使用curl

curl -d "@request.xml"  "http://url/to/your/web/service" -H "Content-Type: text/xml"

如果您的网络服务需要,请添加SOAPAction HTTP标头。还要将内容类型从SOAP {的text/xml更改为SOAP 1.2的application/soap+xml

尽管如此,具有百万个数字的最终请求至少会有大约18 MB。由于最大POST大小限制或超时,这样巨大的请求很可能会失败。要解决此问题,请将请求拆分为较小的请求。