31

HttpClientクラスでサイトwww.livescore.comを呼び出すと、常にエラー「500」が発生します。おそらくサーバーがHttpClientsからの要求をブロックしました。

1)ウェブページからHTMLを取得する他の方法はありますか?

2)HTMLコンテンツを取得するためにヘッダーを設定するにはどうすればよいですか?

ブラウザのようにヘッダーを設定すると、常に標準でエンコードされたコンテンツが表示されます。

    http_client.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
    http_client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
    http_client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
    http_client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");

3)どうすればこの問題を解決できますか?助言がありますか?

C#およびHttpClientClassでWindows8Metroスタイルアプリを使用しています

4

4 に答える 4

5

注意すべき点がいくつかあります。

  1. そのサイトでは、ユーザー エージェントを提供する必要があります。そうしないと、500 HTTP エラーが返されます。

  2. livescore.com への GET リクエストは、livescore.us への 302 で応答します。リダイレクトを処理するか、livescore.us を直接リクエストする必要があります

  3. gzip で圧縮された応答を解凍する必要があります

このコードは .NET 4 Client Profile を使用して動作します。Windows ストア アプリに適合するかどうかを判断させてください。

var request = (HttpWebRequest)HttpWebRequest.Create("http://www.livescore.com");
request.AllowAutoRedirect = true;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17";

string content;

using (var response = (HttpWebResponse)request.GetResponse())
using (var decompressedStream = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))
using (var streamReader = new StreamReader(decompressedStream))
{
    content = streamReader.ReadToEnd();
}
于 2013-02-22T19:05:35.317 に答える
1

開発者が画面をスクレイピングするのを阻止するために彼らがあらゆることを行ったことは間違いないと思います。

このコードを使用して標準の C# プロジェクトから試してみると:

  var request = WebRequest.Create("http://www.livescore.com ");
  var response = request.GetResponse();

私はこの応答を受け取ります:

The remote server returned an error: (403) Forbidden.
于 2013-02-22T15:13:54.830 に答える