【问题标题】:Timeout with HTTPClient C# on VPS Linux, ping and curl OK, no firewall在 VPS Linux 上使用 HTTPClient C# 超时,ping 和 curl 正常,没有防火墙
【发布时间】: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

API 链接:https://api.store.nvidia.com/partner/v1/feinventory?skus=FR~NVGFT070~NVGFT080~NVGFT090~NVLKR30S~NSHRMT01~NVGFT060T~187&locale=FR

谢谢!

超时错误:

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) 处

【问题讨论】:

    标签: c# .net linux


    【解决方案1】:

    在我的 Debian 机器上同样的问题。 https请求突然出现超时异常,但我之前根本没有执行任何配置步骤。该应用程序刚刚停止工作! 我发现要解决的问题: https://github.com/dotnet/runtime/issues/47267 据此,您需要禁用 ipv6。对于我的主机,我已经更改了 sysctl.conf,如下所述:https://wiki.it-kb.ru/unix-linux/debian/how-to-turn-off-ipv6-in-debian-linux 现在超时问题为我解决了。

    【讨论】:

    • 谢谢,但禁用 ipv6 并不能解决我的问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-09
    • 2013-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多