Already I had a problem with sending data using the TIdHTTP
component in Delphi 11, and I got the solution from Getting spaces after upgrading from Indy 9 on Delphi 6 to Indy 10 on Delphi 11.
// sUrl - DSOAP Url
// streamRequest - Request Stream and it will send as compressed data.
// streamResponse - TStream of the response of DSOAP and it will receive as compressed.
IdHttp.Post(sUrl, streamRequest, streamResponse)
Now, I'm facing the problem after receiving the data. How can I read the data from the stream using Delphi 11?
Here is the code to convert the received stream to a string
. After calling this method, I'm getting some junk value:
var
xml: PChar;
sXML: string;
iLength: string;
streamResponse: TStream; // Before this method, the response is decompressed using ZLib decompression Logic
begin
iLength := streamResponse.Seek(0, 2);
xml = strAlloc(iLength+1);
FillChar(xml^, iLength+1, #0);
streamResponse.Seek(0, 0);
streamResponse.Read(xml^, iLength);
sXML := strPas( xml ); // Getting error after calling this.
strDispose(xml);
end;
This logic works fine in Delphi 6, but is getting an error while using Delphi 11.
First of all - you must to check if you decompress stream in a right way.
You can do in by saving content of stream in file and open it by any text editor.
streamResponse.SaveToFile('c:\temp\MyStream.txt');
If all is fine - convert it into string:
var
sStream : TStringStream;
sXML : string;
...
sStream := TStringStream.Create('', TEncoding.UTF8);
try
sStream.LoadFromStream(streamResponse);
sXML := sStream.DataString;
finally
sStream.Free
end;
end;