2015-09-14 2 views
0

Я использую бесплатную версию Soap UI для некоторого покоя.SOAP UI - сохранить HTTP-запрос в файл GZIP

Мне нужно сохранить мой HTTP-запрос POST (запрос уже сжатый gzip) в файл gzip.
Я пробовал разные способы сделать это, однако после выполнения кода, когда я пытаюсь вручную распаковать файл, у меня есть следующая ошибка: «Архив находится в неизвестном формате или поврежден».

запрос HTTP POST имеет следующий заголовок:

Host : 127.0.0.1:8091 
Content-Length : 636 
User-Agent : Java/1.7.0_07 
Connection : keep-alive 
Content-Type : application/octet-stream 
Accept : text/plain, application/json, application/*+json, */* 
Pragma : no-cache 
Cache-Control : no-cache 

Ниже решения, которые я пробовал:

Решение # 1:

byte[] buffer = new byte[1024]; 
byte[] data = mockRequest.getRequestContent().getBytes(); 
def path="myfile.gz"; 
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path)); 
bos.write(data); 
bos.flush(); 
bos.close(); 

Решение # 2

byte[] buffer = new byte[1024]; 
byte[] data = mockRequest.getRawRequestData(); 
def path="myfile.gz"; 
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(path)); 
bos.write(data); 
bos.flush(); 
bos.close(); 

Может кто-нибудь e, пожалуйста, помогите и сообщите мне, почему я не могу распаковать файл gzip и как я могу это сделать?

Спасибо,

+0

Вы подтвердили данные в getRawRequestData() на самом деле gzip-контент? Если нет, попробуйте использовать завиток, чтобы убедиться в этом. См. Http://stackoverflow.com/questions/19538104/save-response-body-to-file-from-curl-request –

+0

Привет, если я изменил тип содержимого в HTTP-сообщении на запрос «gzip», я могу видеть сообщение. Однако я не могу изменить тип содержимого, мне нужно найти решение с типом контента = application/octet-stream. –

ответ

1

Это Groovy, так что вам не нужно все это Java беспорядок.

Вот код, который может работать:

new File(path) << mockRequest.rawRequestData 

EDIT

Ok, на основе ваших комментариев, для архивных файлов, которые будут скопированы правильно, вы, вероятно, нужно что-то немного другое:

import java.nio.file.* 

Files.copy(new ByteArrayInputStream(mockRequest.requestContent.bytes), 
      Paths.get('destination.zip')) 

Протестировано с помощью байта фактического zip-файла [] как источника, и это сработало. Если это не работает для вас, то массив байтов, который вы получаете от requestContent.bytes, просто не является zip-файлом.

+0

Привет, я попытался с этим: 'new File (path) << mockRequest.rawRequestData', но я все еще должен иметь ту же ошибку –

+1

Вы уверены, что rawRequestData содержит байты gzip-файла? – Renato

+0

Я заменил 'new File (path) << mockRequest.rawRequestData' на' new File (path) << mockRequest.getRequestContent() 'и проверить, является ли формат ccontent gzip следующим кодом:' GZIPInputStream gis = new GZIPInputStream (новый ByteArrayInputStream (mockRequest.getRequestContent(). getBytes())), и ни одно исключение не регистрировалось. Таким образом, содержимое, сохраненное в файле, теперь ** ** в gzip. Однако, когда я пытаюсь распаковать (вручную), у меня есть следующее сообщение: Ошибка контрольной суммы в name_file.gz. –

Смежные вопросы