【发布时间】:2021-11-13 22:07:45
【问题描述】:
我想用 httpclient 检索页面的内容。我做了一个简单的方法,在visual studio上效果很好。
private async Task<string> Connection(string Url)
{
using HttpClient client = new();
client.DefaultRequestHeaders.Add("Accept", "application/json");
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.107 Safari/537.36 OPR/77.0.4054.277");
client.DefaultRequestHeaders.Add("Cache-Control", "no-cache, no-store, must-revalidate");
client.DefaultRequestHeaders.Add("Accept-Language", "fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7");
client.DefaultRequestHeaders.Add("Pragma", "no-cache");
double timestamp = GlobalMethod.Timestamp();
string json = await client.GetStringAsync(Url);
return json;
}
但是当我在 linux VPS(Ubuntu、主机 OVH、.NET 5)上运行我的应用程序时,Httpclient 返回错误超时。
在我的 VPS 上,对我要检索的 url 的 ping 和 CURL 函数可以正常工作。但不是 Httpclient。 我的 Postman 请求的设置相同,没有问题。
你对问题有想法吗? 它看起来很像这个话题,我不明白如何解决它:httpClient call in C# goes to timeout, while cUrl is working
谢谢!
超时错误:
System.Threading.Tasks.TaskCanceledException:由于配置的 HttpClient.Timeout 已过 100 秒,请求被取消。 ---> System.TimeoutException:操作被取消。 ---> System.Threading.Tasks.TaskCanceledException:操作被取消。 ---> System.IO.IOException:无法从传输连接读取数据:操作已取消。 ---> System.Net.Sockets.SocketException (125): 操作取消 --- 内部异常堆栈跟踪结束 --- 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.ThrowException(SocketError 错误,CancellationToken 取消令牌) 在 System.Net.Sockets.Socket.AwaitableSocketAsyncEventArgs.GetResult(Int16 令牌) 在 System.Net.Security.SslStream.ReadAsyncInternal[TIOAdapter](TIOAdapter 适配器,内存`1 缓冲区) 在 System.Net.Http.HttpConnection.FillAsync(布尔异步) 在 System.Net.Http.HttpConnection.ReadNextResponseHeaderLineAsync(布尔异步,布尔 foldedHeadersAllowed) 在 System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken) --- 内部异常堆栈跟踪结束 --- 在 System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken) 在 System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage 请求,布尔异步,布尔 doRequestAuth,CancellationToken 取消令牌) 在 System.Net.Http.RedirectHandler.SendAsync(HttpRequestMessage 请求,布尔异步,CancellationToken cancelToken) 在 System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage 请求,HttpCompletionOption 完成选项,布尔异步,布尔 emitTelemetryStartStop,CancellationToken 取消令牌) --- 内部异常堆栈跟踪结束 --- --- 内部异常堆栈跟踪结束 --- 在 System.Net.Http.HttpClient.SendAsyncCore(HttpRequestMessage 请求,HttpCompletionOption 完成选项,布尔异步,布尔 emitTelemetryStartStop,CancellationToken 取消令牌) 在 System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage 请求,CancellationToken cancelToken) 在 C:\Users\gaeta\source\repos\Castiel_Bot_Discord\Castiel_Bot_Discord\Modules\NvidiaCommand.cs:line 114 中的 Castiel_Bot_Discord.Modules.NvidiaCommand.Connection(String Url) 在 C:\Users\gaeta\source\repos\Castiel_Bot_Discord\Castiel_Bot_Discord\Modules\NvidiaCommand.cs:line 42 中的 Castiel_Bot_Discord.Modules.NvidiaCommand.SearchGpu(String args) 处
【问题讨论】: