我使用下面的cURL命令将DataPower文件从applaince获取到远程Solaris服务器。
/usr/local/bin/curl -s --insecure --data-binary @getFile.xml -u username:password https://ip:port/service/mgmt/current
getFile.xml的内容如下所示。
<?xml version="1.0"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<dp:request xmlns:dp="http://www.datapower.com/schemas/management">
<dp:get-file name="config:///unicenter.cfg"/>
</dp:request>
</env:Body>
</env:Envelope>
当我在Solaris上运行上面提到的cURL时,我得到了很长的base64编码字符串。但我希望将完整的文件复制到Solaris。
答案 0 :(得分:2)
长Base64编码的字符串是您的文件。你需要做一些工作来提取它。
这个curl命令正在使用DataPower XML管理界面,他们称之为,因为所有请求和响应都是XML格式的。您可能没有看到它作为长字符串飞过,但它包装在XML中。这是一个带有小负载的示例响应:
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<dp:response xmlns:dp="http://www.datapower.com/schemas/management">
<dp:timestamp>2014-10-23T17:12:39-04:00</dp:timestamp>
<dp:file name="local:///testfile.txt">VGhpcyBpcyBub3QgYW4gYWN0dWFsIGVtZXJnZW5jeS4K</dp:file>
</dp:response>
</env:Body>
</env:Envelope>
所以,你有两个工作要做。首先,从其XML包装器中获取Base64字符串,然后对其进行解码。有一百万种方法可以做到这一点 - 我会给你一个。获取XmlStarlet的副本以进行提取,并OpenSSL进行Base64解码。
然后,像这样管道卷曲输出:
/usr/local/bin/curl -s --insecure --data-binary @getFile.xml -u username:password https://ip:port/service/mgmt/current \
| (xmlstarlet sel -T -t -v "//*[local-name()='file']" && echo) \
| fold -w 64 \
| openssl enc -d -base64 >this-is-the-real-file
两个快速注释 - “&amp;&amp; echo”是添加尾部换行符,“fold”是将Base64字符串拆分为行。一个不那么挑剔的Base64解码器不需要这些。我刚刚选择了“openssl”,因为大多数人已经拥有它了。