1

次のコードがあり、奇妙な動作が発生しています。

次の Web ページをダウンロードしようとしていますが、ほとんどの場合、空白のページが返されますが、一度は機能することがありますが、同じ検索が 2 回目は機能しません。理由はよくわかりませんが、他のサイトでも同じコードが機能していて、問題なく機能しています。

http://tpb.pirateparty.org.uk/search/test/0/99/0
「test」は、検索によって変化する検索テキストです。

private static string DownloadHtml()
{
    var client = new WebClient();
    var data = client.OpenRead("http://tpb.pirateparty.org.uk/search/test/0/99/0");
    var reader = new StreamReader(data);
    var html = reader.ReadToEnd();
    data.Close();
    reader.Close();
    return html;
}

誰かが私が見逃しているかもしれない何かを知っていますか?

4

2 に答える 2

2

DisposeSheena の回答に加えて、別の可能性として、Http 接続を適切に行っていない可能性があります。

あなたは単に行うことができます:

return new WebClient().DownloadString(
    "http://tpb.pirateparty.org.uk/search/test/0/99/0");

これらすべての詳細を処理するか、基になるストリームにアクセスしたい場合は、次のようにします。

var client = new WebClient();

using (var data = client.OpenRead(
    "http://tpb.pirateparty.org.uk/search/test/0/99/0"))
{
    var reader = new StreamReader(data);
    return reader.ReadToEnd();
}
于 2012-10-14T11:59:05.760 に答える
0

それは、サイトへのリクエストが「私はブラウザの背後にいる人間です」ではなく「私はスクリプトです」と言っているという事実に関係している可能性があります。ブラウザで検索を繰り返し実行することが正常に機能する場合、解決策はリクエストにヘッダーを設定することです。

したがって、wiresharkなどを使用して、ブラウザを使用したときに送信されるヘッダーを確認し(User-Agentフィールドを確認する必要があります)、次のようなコマンドを使用してヘッダーを設定します。

myWebClient.Headers.Add("some_header_name","the_value");
于 2012-10-14T11:53:40.000 に答える