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

我可以手动访问URL,但在使用.Net时会超时。

我创建了一个按钮,可以更轻松地复制场景。 有时我得到一个exception,说任务被取消,否则这个代码片段后面有一个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 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; } 

结果如下:

  504 Gateway Time-out  

504 Gateway Time-out


nginx/1.2.0

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

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

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

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