2014-10-02 47 views
3

我使用下面的cURL命令將DataPower文件從applaince獲取到遠程Solaris服務器。 getFile.xml的DataPower文件傳輸返回base64

/usr/local/bin/curl -s --insecure --data-binary @getFile.xml -u username:password https://ip:port/service/mgmt/current

內容如下所示。

<?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。

回答

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> 

所以,你有兩個工作要做。首先,將Base64字符串從其XML包裝器中取出,然後對其進行解碼。有一百萬種方法可以做到這一點 - 我會給你一個。獲取副本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 

兩個快速筆記 - 的「& &回聲」是添加一個尾隨換行,和「摺疊」是將Base64的字符串分割成線。一個不那麼挑剔的Base64解碼器不需要這些。我只是選擇了「openssl」,因爲大多數人已經擁有它。