具有 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 大小限制或超时,如此巨大的请求很可能会失败。要解决此问题,请将请求拆分为更小的请求。
我们使用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 大小限制或超时,如此巨大的请求很可能会失败。要解决此问题,请将请求拆分为更小的请求。