content-lengthの値が圧縮後のサイズになるケースがあったので、圧縮前のサイズを取得するようにした #2
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
このPRでやりたいこと
Content-Lengthの値を正しく取得できるようにしたい。
FileDownloader.download では、ファイルが最後までダウンロードできたか判定するために、ダウンロード前にHEADリクエストを行い、Content-Lengthの値でダウンロードするファイルのサイズを取得している。
HEADリクエストを行う際、 Accept-Encoding に圧縮形式を指定することで、相手先サーバによって Content-Length の値が圧縮後のサイズになる、あるいは Content-Length が返されない場合があることがわかった。
FileDownloaderでは、Content-Lengthの値とファイルシステムに書き込んだサイズを比較して最後までダウンロードできたか判定しているため、 Content-Length は圧縮前のファイルサイズで取得できることが望ましい。
やったこと
FileDownloader::Service#fetch_content_length で HEAD リクエストを行う時に、リクエストヘッダを
'accept-encoding' => ''
でオーバーライドした。see: https://github.com/ruby/net-http/blob/042faf74e77d786ff60dff81555f6ec4f21e77a9/lib/net/http/request.rb#L31