2016-11-18 291 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

    相关问题