Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Karate 空手道中如何解压gzip响应_Karate - Fatal编程技术网

Karate 空手道中如何解压gzip响应

Karate 空手道中如何解压gzip响应,karate,Karate,有没有办法用空手道解压gzip响应?。我曾尝试使用空手道apache v0.9.6和空手道jersey v0.9.6,但默认情况下,这两种版本都没有解压缩响应内容。 当我尝试获取并打印响应时,我看到如下所示 INFO com.intuit.karate - [print] the resp l�ǒ�@�Ee�{��wh�5�Bk-�����ͪ͘�T 我不确定我在这里错过了什么 但是,当我尝试使用ApacheHttpClient.GzipDecompressingEntity时,我成功

有没有办法用空手道解压gzip响应?。我曾尝试使用空手道apache v0.9.6和空手道jersey v0.9.6,但默认情况下,这两种版本都没有解压缩响应内容。 当我尝试获取并打印响应时,我看到如下所示

INFO  com.intuit.karate - [print] the resp   l�ǒ�@�Ee�{��wh�5�Bk-�����ͪ͘�T  
我不确定我在这里错过了什么

但是,当我尝试使用ApacheHttpClient.GzipDecompressingEntity时,我成功地将响应实体解压缩为字符串,并按预期工作。
final String s1=IOUtils.toString(gzipDecompressingEntity.getContent(),StandardCharsets.utf8)

我也提到了这个问题,但运气不好

这是空手道输出:

搭配运动衫

1 > GET http://localhost:4000/somedata?type=json&gzip=yes
1 > Accept-Encoding: deflate
1 > User-Agent: Jersey/2.30 (HttpUrlConnection 11.0.9)

[ForkJoinPool-1-worker-3] DEBUG com.intuit.karate - response time in milliseconds: 139.51
1 < 200
1 < Cache-control: no-cache
1 < Connection: keep-alive
1 < Content-Disposition: attachment; filename="somedata.gz"
1 < Content-Length: 78056
1 < Content-Type: application/gzip
1 < Keep-Alive: timeout=5

[ForkJoinPool-1-worker-3] INFO  com.intuit.karate - [print] the resp       
l�ǒ�@�Ee�{��wh�5�Bk-�����ͪ͘�T   �~�Ɋ�iʴ(�?������巵us���a,�]n^�jz=a�gU��!
1>获取http://localhost:4000/somedata?type=json&gzip=yes
1>接受编码:放气
1>用户代理:Jersey/2.30(HttpUrlConnection 11.0.9)
[ForkJoinPool-1-worker-3]DEBUG com.intuit.karate-响应时间(毫秒):139.51
1 < 200
1<缓存控制:无缓存
1<连接:保持活动
1<内容处置:附件;filename=“somedata.gz”
1<内容长度:78056
1<内容类型:应用程序/gzip
1<保持活动状态:超时=5
[ForkJoinPool-1-worker-3]INFO.com.intuit.karate-[print]响应
L�ǒ�@�Ee�{��wh�5.�Bk-�����ͪ͘�T�~�Ɋ�iʴ(�?������巵我们���A.�]n^�jz=a�顾��!
使用Apache Httpclient

1 > GET http://localhost:4000/somedata?type=json&gzip=yes
1 > Accept-Encoding: deflate
1 > Connection: Keep-Alive
1 > User-Agent: Apache-HttpClient/4.5.12 (Java/11.0.9)

17:26:14.243 [ForkJoinPool-1-worker-3] DEBUG com.intuit.karate - response time in milliseconds: 102.86
1 < 200
1 < Cache-control: no-cache
1 < Connection: keep-alive
1 < Content-Disposition: attachment; filename="somedata.gz"
1 < Content-Length: 78065
1 < Content-Type: application/gzip
1 < Keep-Alive: timeout=5

 [ForkJoinPool-1-worker-3] INFO  com.intuit.karate - [print] the resp       
��(K�hP���J��G�w�nQG=i�U�(g�=�p���0�3`_����To�3�A��Բ�m�
1>获取http://localhost:4000/somedata?type=json&gzip=yes
1>接受编码:放气
1>连接:保持活动状态
1>用户代理:Apache HttpClient/4.5.12(Java/11.0.9)
17:26:14.243[ForkJoinPool-1-worker-3]DEBUG com.intuit.karate-响应时间(毫秒):102.86
1 < 200
1<缓存控制:无缓存
1<连接:保持活动
1

有人能在这里给我建议吗?谢谢!

这听起来像是对空手道的强化要求

如果您对代码更改有一些想法,请像提交问题链接的人一样提交PR。至少,请提交一种复制方式:

当然,在此之前,您可以检查1.0 RC版本是否解决了这一问题,因为HTTP客户端被重新考虑了一点:

EDIT-OP在我下面添加的注释中提供了一个答案。由于空手道公开了每个响应的原始字节,您可以使用自定义Java实用程序进行转换:

byte[] bytes=(byte[]) responseBytes; //responseBytes object from Karate.
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); //transform into ByteArrayInputstream
GZIPInputStream gzipInputStream = new GZIPInputStream(byteArrayInputStream); //Convert gzipInputstream
final String decompressedOutput = IOUtils.toString(gzipInputStream,StandardCharsets.UTF_8); 

请将前面问题的答案标记为
已接受
。我至少看到了2@PeterThomas,谢谢提醒,我已将前面问题的答案标记为已接受。此外,我对Stackoverflow的流程也不太熟悉。请告知是否有必要使用空手道解压gzip响应。谢谢您的提示响应。让我试试v1.0RC并检查它是否有效,否则我将提交一个问题。Hello@PeterThomas,我刚刚用v0.9.9RC4进行了测试,它不起作用,得到了相同的乱码响应。我必须在记录问题之前创建一个示例项目。再次感谢。我还想知道我是否可以收集发送的http实体响应通过空手道并将其发送到java进行任何处理。@sanm是的,原始字节将在
responseBytes
:-因此您可以将其传递给自定义java方法。我正在考虑的一件事是添加
karate.unzip()
method我想共享一个可能帮助他人的变通方法[临时解决方案]:
byte[]bytes=(byte[])responseBytes;//来自空手道的responseBytes对象。final ByteArrayInputStream ByteArrayInputStream=new ByteArrayInputStream(bytes);//转换为ByteArrayInputStream gzip输入流gzip输入流gzip输入流=new gzip输入流(ByteArrayInputStream);//转换gzip输入流最终字符串解压缩doutput=IOUtils.toString(gzipInputStream,StandardCharsets.UTF_8);
@sanm awesome,我更新了我的答案,加入了你的评论