2016-11-18 292 views
0

我想用JSON作爲格式測試SoapUI 5.0中的POST請求。在SoapUI中成功發送POST請求後接收到加密的JSON響應

它工作正常,如果我使用郵差,但如果我嘗試在SoapUI內完成相同,我只是得到一個垃圾JSON響應似乎沒有正確編碼。 根據響應標題,一切都必須正確(200 OK狀態,正確的內容長度),它只是無法正確顯示。

我發現它與編碼有關,所以我嘗試在請求標頭中設置Content-Type: application/json, charset=UTF-8,並將請求屬性中的「Encoding」屬性設置爲「UTF-8」。

仍舊是垃圾回覆。

任何想法?

Raw Request & Raw Response

回答

2

你的反應是gzip格式,看到你的迴應Content-Encoding:gzip HTTP標頭。

從理論上說,SOAPUI必須自動爲您自動解壓縮並以純文本形式顯示響應,但似乎對您的情況無效。我嘗試使用一些REST API和響應gzip編碼,響應被正確解碼。 (我使用的是SOAPUI 5.2.1而不是5.0.0)。

然後一個可能的解決方法可能是將您當前的http標頭accept-encoding : gzip值更改爲accept-encoding : identity,以明確告訴服務器您希望以純文本格式回覆。

如果identity不適用於此WS工作,試着告訴那gzip是一個q價值0不可接受:Accept-Encoding: gzip;q=0或:Accept-Encoding: gzip;q=0, identity; q=1.0

如果你評論這不是對你的作品,可能是由於您的WS無視這個標題,你可以嘗試ungzip自己使用具有以下解決方法Groovy腳本測試步驟響應:

  1. 配置Dump File財產在你的REST TestRequest屬性:

enter image description here

  • 創建一個Groovy步步測試的使用後續腳本ungzip以得到它作爲純文本轉儲響應:
  • import java.io.ByteArrayInputStream 
    import java.io.FileOutputStream 
    import java.io.IOException 
    import java.util.zip.GZIPInputStream 
    
    def buffer = new byte[1024] 
    
    // create the zip input stream from your dump file 
    def dumpFilePath = 'C:/temp/' 
    FileInputStream fis = new FileInputStream("${dumpFilePath}/dumpRest.json") 
    // create the instance to ungzip 
    def gzis = new GZIPInputStream(fis) 
    // fileOutputStream for the result 
    def fos = new FileOutputStream("${dumpFilePath}/dumpRestUngizped.json") 
    // decompress content 
    gzis.eachByte(1024){ buf, len -> fos.write(buf,0,len)} 
    // close streams 
    gzis.close() 
    fos.close() 
    
    +0

    謝謝,但不幸的是沒有工作,仍然是相同的輸出。 編輯: 它實際上完全忽略了這一說法。它仍然在響應頭文件中說'Content-Encoding:gzip'。 – tugadesperado

    +0

    @tugadesperado我更新了我的答案,試圖做一個與http頭不同的值,希望這一次它更有幫助:) – albciff

    +0

    我試過了你的兩個例子,它給了我仍然完全相同的原始響應... 這些是標題: 'HTTP/1。1 200 OK' '內容 - 類型:應用/ json' '的Content-Length:502' '連接:保持Alive' '消息類型:Application' '內容編碼:gzip' – tugadesperado

    相關問題