質問: c:\program files (x86)\gnuwin32/etc/wgetrc setting --server-response (serverresponse) to 1 setting --continue (continue) to 1 setting --http-keep-alive (httpkeepalive) to 1 debug output created by wget 1.11.4 on windows-mingw. --2012-01-11 07:12:51-- http://www.example.com/file.tmp www.example.com çözümleniyor... seconds 0,00, 127.0.0.1 caching www.example.com => 127.0.0.1 www.example.com[127.0.0.1]:80 bağlanılıyor... seconds 0,00, bağlantı kuruldu. created socket 300. releasing 0x0003a0b0 (new refcount 1). ---request begin--- get /file.tmp http/1.0 range: bytes=557172- user-agent: wget/1.11.4 accept: */* host: www.example.com connection: keep-alive ---request end--- http isteği gönderildi, yanıt bekleniyor... ---response begin--- http/1.1 206 partial content server: nginx/0.7.65 date: wed, 11 jan 2012 05:14:01 gmt content-type: application/vnd.ms-powerpoint content-length: 37104524 last-modified: tue, 01 nov 2011 21:18:50 gmt connection: keep-alive expires: thu, 31 dec 2037 23:55:55 gmt cache-control: max-age=315360000 content-range: bytes 557172-37661695/37661696 ---response end--- http/1.1 206 partial content server: nginx/0.7.65 date: wed, 11 jan 2012 05:14:01 gmt content-type: application/vnd.ms-powerpoint content-length: 37104524 last-modified: tue, 01 nov 2011 21:18:50 gmt connection: keep-alive expires: thu, 31 dec 2037 23:55:55 gmt cache-control: max-age=315360000 content-range: bytes 557172-37661695/37661696 registered socket 300 for persistent reuse. uzunluk: 37661696 (36m), 37104524 (35m) kalan [application/vnd.ms-powerpoint] saving to: `file.tmp' 1% [ ] 622.314 149k/s ^
回答: あなたがそれをどのように見るかに応じて、これはバグまたは欠落している機能のいずれかです。--headerで指定されたヘッダーは、wgetによってのみ送信されますが、解釈されません。wget1.13.4のtarballのsrc/http.cには、部分的なコンテンツのサニティチェックがあります。 if ((contrange != 0 && contrange != hs->restval) || (h_partial (statcode) && !contrange)) { /* the range request was somehow misunderstood by the server. bail out. */ xfree_null (type); close_invalidate (sock); xfree (head); return rangeerr; } if条件は、次の2つのケースをカバーします。 コンテンツ範囲が設定されている場合は、ダウンロードされているファイルの欠落しているビットの数と一致している必要があります。 部分的なコンテンツを送信する場合は、サーバーがコンテンツ範囲を指定する必要があります。 2番目のケースでは、wgetがサーバーの応答を適切に解釈するため、問題は発生しません。ただし、最初の方法は、wgetがクライアント指定の範囲を解釈しなかったためです。この問題を解決するために、独自のバージョンのwgetをコンパイルする場合は、上記のソースコードを次のように変更できます。 if (h_partial (statcode) && !contrange) { xfree_null (type); close_invalidate (sock); xfree (head); return rangeerr; } if (contrange != 0 && contrange != hs->restval) hs->restval = contrange; これで、wgetはコンテンツ範囲からファイルの欠落ビット数を差し引きます。 curl を試してみることもできます。 --rangeスイッチが組み込まれています。