具有 100 万个数字的数组

Array with 1 million number

我们使用Wizdler 来获取数据。但是我们必须获得大约 100 万人的数据。 有一种替代方法可以只搜索一个或多个。 我们总是在这里写ID,一个一个。 我们的问题是,有没有办法一次性向这里输入100万个数字? 我们也有一个包含所有 ID 号码的列表。是否可以将 link 输入到包含所有数字的文件中,或者我们必须这样写所有数字?

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

我已将所有组合保存为文本文件。长得像。

0000000

0000001

0000002

0000003

等...

无法在该 SOAP 请求中对您的文件使用 link。 SOAP 请求必须包含您要检索的所有标识符。此外,一百万行对于该 Web 服务来说可能太多了,您需要将它们分成多个块。

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

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

awk '[=10=]="<a:int>"[=10=]"</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>"[=12=]"</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)。

要调用网络服务,您可以使用curl:

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

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

综上所述,最终的百万数字请求至少将有大约 18 MB。由于最大 POST 大小限制或超时,如此巨大的请求很可能会失败。要解决此问题,请将请求拆分为更小的请求。