使用HttpClient请求部分URL出现Task canceled错误,求排查方向
解决HttpClient请求特定URL出现Task Canceled错误的问题
可能原因及对应解决方案
- 请求超时:目标API响应速度可能超出HttpClient默认超时时间(100秒),可尝试延长超时:
Async Function GetRequest(url As String) As Task(Of String) Using client As New HttpClient() ' 设置5分钟超时 client.Timeout = TimeSpan.FromMinutes(5) Using response As HttpResponseMessage = Await client.GetAsync(url) Using content As HttpContent = response.Content Dim myContent As String = Await content.ReadAsStringAsync() Return myContent End Using End Using End Using End Function - 缺少必要请求头:部分API会验证请求头(如User-Agent、Referer),浏览器会自动携带这些信息,但HttpClient默认没有。可添加模拟浏览器的请求头:
Async Function GetRequest(url As String) As Task(Of String) Using client As New HttpClient() ' 添加Chrome浏览器请求头 client.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36") client.DefaultRequestHeaders.Referrer = New Uri("https://www.tab.com.au/") Using response As HttpResponseMessage = Await client.GetAsync(url) Using content As HttpContent = response.Content Dim myContent As String = Await content.ReadAsStringAsync() Return myContent End Using End Using End Using End Function - 重定向处理异常:目标URL可能存在多次重定向,可调整自动重定向的配置:
Async Function GetRequest(url As String) As Task(Of String) Using handler As New HttpClientHandler() With {.AllowAutoRedirect = True, .MaxAutomaticRedirections = 10} Using client As New HttpClient(handler) Using response As HttpResponseMessage = Await client.GetAsync(url) Using content As HttpContent = response.Content Dim myContent As String = Await content.ReadAsStringAsync() Return myContent End Using End Using End Using End Using End Function - 网络环境限制:检查是否存在代理、防火墙拦截目标API的情况,可切换网络环境测试。
调试建议
捕获完整异常信息,定位具体问题:
Private Async Sub Button25_Click(sender As Object, e As EventArgs) Handles Button25.Click Try Dim strContent As String = Await GetRequest("https://api.beta.tab.com.au/v1/historical-results-service/QLD/racing/2024-04-22/B/R/races/2") Catch ex As Exception ' 查看完整异常及内部异常信息 MessageBox.Show(ex.ToString()) End Try End Sub
内容的提问来源于stack exchange,提问作者user1500403
相关产品推荐
相关产品推荐

