DataPower文件传输返回base64

时间:2014-10-02 14:23:57

标签: xslt curl base64 ibm-datapower

我使用下面的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。

1 个答案:

答案 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”,因为大多数人已经拥有它了。