5

URLに手動でアクセスできますが、.Netを使用するとタイムアウトになります。

シナリオをより簡単に複製するためのボタンを作成しました。タスクがキャンセルされたという例外が発生することがあります。それ以外の場合は、このコードスニペットに続く504エラーが発生します。

    private async void Button_Click_1(object sender, RoutedEventArgs e)
    {
        var url = "http://api.dailyfive.tv/index.php?task=REQUEST_REGIONS&session=TestWin8&app=4&model=TestWin8&ver=1.0.0.7&os=8&region=";
        var output = await ReadHttpResponse(url);
    }
    private async Task<string> ReadHttpResponse(string url)
    {
        try
        {
            using (HttpClient client = new HttpClient())
            {
                HttpResponseMessage response = await client.GetAsync(url);
                return await response.Content.ReadAsStringAsync();
            }
        }
        catch (Exception ex)
        {
        }
        return null;
    }

結果は次のとおりです。

<html>
<head><title>504 Gateway Time-out</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Time-out</h1></center>
<hr><center>nginx/1.2.0</center>
</body>
</html>
4

1 に答える 1

4

サーバーはクライアントのユーザーエージェントに敏感なようです。これらの行をサンプルコードに追加すると、コードが活気づきました。

client.DefaultRequestHeaders.UserAgent.Clear();
client.DefaultRequestHeaders.UserAgent.ParseAdd("Chrome/22.0.1229.94");

(それを行うためのより良い方法があるかもしれません-私はHttpClient以前に使用したことがありません。)

余談ですが、あなたがそのような例外を実際に飲み込んでいないことを願っています...

于 2012-10-21T13:53:47.727 に答える