他のウェブサイトからhtmlページをダウンロードするプログラムを書いています。 特定のWebサイトでは、完全なHTMLコードを取得できないという問題が見つかりました。そして私は部分的な内容しか得ることができません。 この問題のサーバーは、 "Transfer-Encoding:chunked"でデータを送信しています これは問題の原因です。返品コンテンツがTransfer-Encodingの場合、HttpWebResponseから完全なコンテンツを取得する方法:チャンク?
このサーバから返されたヘッダー情報:ここでは
Transfer-Encoding: chunked
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Content-Type: text/html; charset=UTF-8
Date: Sun, 11 Sep 2011 09:46:23 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Server: nginx/1.0.6
が私のコードです:
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
HttpWebResponse response;
CookieContainer cookie = new CookieContainer();
request.CookieContainer = cookie;
request.AllowAutoRedirect = true;
request.KeepAlive = true;
request.UserAgent =
@"Mozilla/5.0 (Windows NT 6.1; rv:6.0.2) Gecko/20100101 Firefox/6.0.2 FirePHP/0.6";
request.Accept = @"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
string html = string.Empty;
response = request.GetResponse() as HttpWebResponse;
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
html = reader.ReadToEnd();
}
私は部分的にしかHTMLコードを取得することができます(私はそれが最初のチャンクだと思いますサーバーから)。誰でも助けてくれますか?どんな解決策ですか?
ありがとうございます!
HttpWebResponseはすでにチャンクデータを処理する方法を知っています。あなたが無視できないのは、ContentEncodingです。あなたはStreamReaderのコンストラクタ呼び出しでutf8を使うと仮定しますが、そうでない場合は間違っています。 –
こんにちはハンス・パッセント、ご意見ありがとうございます。私は、WebページがUTF8エンコーディングであることを確認します。 StreamReaderのエンコーディング設定をASCIIに変更しようとしましたが、Unicodeに変更すると同じ結果が得られますが、すべてのコンテンツはコードを読み取ることができません。 – syking
@ HansPassant私は明らかに同じ問題を抱えていますが、StreamReaderコンストラクタでエンコーディングを渡すことは役に立たないようです。また、ResponseStreamをMemoryStreamにコピーし、可能なすべてのエンコーディング用にStreamReaderを作成してみましたが、どれもすべてのチャンクを完全にダンプできないようです。何か案が? –