HttpClient.GetAsync(url)将504返回到在浏览器中工作的URL

时间:2012-10-21 11:04:14

标签: c# httpclient

我可以手动访问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>

1 个答案:

答案 0 :(得分:4)

看起来服务器对客户端的用户代理敏感。当我将这些行添加到您的示例代码中时,代码就变成了生命:

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

(可能有更好的方法 - 之前我没有使用HttpClient。)

顺便说一句,我希望你不是真的吞下这样的例外......