我们使用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
等...
答案 0 :(得分:1)
在该SOAP请求中无法使用指向您文件的链接。 SOAP请求必须包含您要检索的所有标识符。此外,对于该Web服务而言,可能会有一百万行太多,您需要将它们拆分为多个块。
要创建包含所有数字的SOAP请求,您可以使用命令生成所有int
元素。然后,您可以使用任何文本编辑器将其包装到SOAP信封中。这将为您提供可以发送到Web服务的请求。
在Linux环境中,生成行的命令将如下所示(identifiers.txt
是包含所有标识符的文件的名称,a
是http://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大小限制或超时,这样巨大的请求很可能会失败。要解决此问题,请将请求拆分为较小的请求。