Форум: "Сети";
Текущий архив: 2015.01.25;
Скачать: [xml.tar.bz2];
ВнизUnzip SOAP response Найти похожие ветки
← →
amelnyk © (2010-05-20 15:43) [0]Всем привет!
Думал довольно стандартная ситуация, но запнулся и уже совсем измотался в поиске...
Есть приложение, работающее по SOAP (через импортированный wsdl). Стала задача использовать зипование для SOAP ответов.
Я добавил заголовок ко всем запросам - "Accept-Encoding: gzip". Да, теперь получаю респонсы в зипованном виде...
Но тут стала проблемка...
Delphi при попытке распарсить зипованный ответ, выдаёт эксепшн:
An invalid character was found in text content.
Line: 1
Вылетает именно при вызове метода удаленного интерфейса, я сам с этим зипованным ответом еще не успеваю ничего сделать. Как распаковать ответ до его обработки?
Подскажите куда копать...
← →
amelnyk © (2010-05-21 17:58) [1]Родил решение). Может кому еще будет полезно...
Создаю класс наследник THTTPReqResp, в котором переопределен метод Receive:
[CODE=pas] TMyHTTPReqResp = class(THTTPReqResp)
public
procedure Receive(Context: Integer; Resp: TStream; IsGet: Boolean);override;
end;[/CODE]
Сам метод выглядит примерно так:
////////////////////////////////////////////////////////////////////////////////
[CODE=pas]procedure TMyHTTPReqResp.Receive(Context: Integer; Resp: TStream; IsGet: Boolean);
var
outStream : TMemoryStream;
contEncoding : string;
size : DWord;
index : DWord;
begin
inherited;
try
size := 20;
index := 0;
SetLength(contEncoding, size);
//проверяем есть ли заголовок Content-Encoding
if not HttpQueryInfo(Pointer(Context), HTTP_QUERY_CONTENT_ENCODING, @contEncoding[1], size, index) then
Exit;
//если есть, то смотрим стоит ли там gzip
if Pos("gzip", contEncoding) = 0 then
Exit;
//если gzip, то разархивировываем и копируем в возвращаемый стрим
Resp.Position := 0;
outStream := TMemoryStream.Create;
try
GZDecompressStream(Resp, outStream);
Resp.Position := 0;
Resp.CopyFrom(outStream, 0)
finally
outStream.Free;
end;
except
end;
end;[/CODE]
Где метод GZDecompressStream взят из либы Zlib, скачанной для Delphi 2009 отсюда: http://www.base2ti.com/zlib.htm
А то с родным ZLib че-то не сложилось, не хотел он распаковывать.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2015.01.25;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.001 c