TIdHTTP
とTIdCompressorZLib
を使用して、gzip圧縮を有効にしたページを取得しようとしています。 Windowsでは、コードは正常に動作し、データは解凍されます。しかし、OSX上の全く同じコードはまだ圧縮されているようなガベージデータを返す。どこが間違っているのか分かりません。OSXでTIdHTTPとTIdCompressorZLibを使ってgzipを解凍する問題
これは私がテストしていたコードされています。それはWindows上で、プレーン、解凍HTMLである一方、
with TIdHTTP.Create(nil) do begin
HandleRedirects := true;
Compressor := TIdCompressorZLib.Create(nil);
Request.AcceptEncoding := 'gzip, deflate';
Data := Get('http://google.com.au');
Compressor.Free;
Free;
WriteLn(Data);
end;
Data
は、OSX上の元の圧縮されたゴミのように見えます。
私はDelphi 10.1 Berlin Update 1とOSX 10.11を使用しています。
ありがとうございました。 'IsReady'プロパティがfalseを返すということは間違いありません。これはzlibライブラリがまったく読み込まれていないように見えるので、いくつかのhttpリクエストの後では常にfalseを返します。これはJan-2016 SVN rev 5330で導入されたバグです。私は 'IdZlibHeaders'ユニットをUsesリストに追加しました。 'TIdCompressorZLib'オブジェクトを作成した後に' IdZlibHeaders.Load'と呼ばれ、 'IsReady'がtrueを返し、gzipの内容が解凍されています –
はい、元のバグは' TIdCompressorZLib'がIdZLibHeaders.Load() 'IsReady'は単に' IdZLibHeaders.Loaded() 'から値を返しただけです。修正は 'IsReady'がまだ呼び出されていない場合に備えて、' Load() 'を代わりに呼び出すことでした。 –
Nick Cの回避策も、10.1 Berlinで私のために修正しました。 – Olecramoak