dポイントプレゼントキャンペーン実施中!

C#で

WebRequest webreq = (HttpWebRequest)WebRequest.Create(strURL);
webreq.Timeout = 10000;
HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse();

でサイトのデータ(HTML)を取得しているのですが、
サイトによっては1ページ全部取得できない場合があります。

しかしブラウザで見ると全部表示され、
そのソースをみても全部表示されています。

なぜC#のRequestで取得した場合には、
ソースが途切れる場合があるのでしょうか?

取得中タイムとかの設定があるのでしょうか?


よろしくお願いします。

A 回答 (1件)

恐らく、同期モードで読み込んでいるため、読み込み(受信)が完了する前に内部的で落ちちゃっているんじゃないかと思います。



だからといってRequestのTimeOut値を伸ばせばいいのかというと、後続の処理のレスポンスが悪化が懸念されます。

この場合、WebRequestの「BeginGetResponse」を使って、
非同期でWebRequestを読み込んであげる必要があると思います。


WebRequest webreq = (HttpWebRequest)WebRequest.Create(strURL);

IAsyncResult r =(IAsyncResult) webreq.BeginGetResponse(new AsyncCallback(ResponseCallback), webreq);

//非同期要求が終了した時に呼び出されるコールバックメソッド
private static void ResponseCallback(IAsyncResult ar)
{
  // HttpWebRequestを取得
  HttpWebRequest webreq = (HttpWebRequest) ar.AsyncState;

  //非同期要求を終了
  HttpWebResponse webres =(HttpWebResponse)webreq.EndGetResponse(ar);

}

試していないので、質問に対する自信はありませんが、ご参考に
なれば、幸いです。

詳細は、DOBON.NETさんの
http://dobon.net/vb/dotnet/internet/webrequest.h …
にある、「非同期でダウンロードする」をご覧頂けたらと
思います。

参考URL:http://dobon.net/vb/dotnet/internet/webrequest.h …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!