gpt4 book ai didi

c# - 用于 Linux/Unix 的替代 HttpClientHandler

转载 作者:太空宇宙 更新时间:2023-11-04 13:00:58 26 4
gpt4 key购买 nike

我正在寻找 Mono HttpClient 堆栈的可移植替代品。可移植 Mono 版本 [常规 Mono 堆栈的一部分] 有错误。我一直在尝试修复影响我们项目的一个特定错误。由于异步操作所需的库的高度异步特性,Mono 代码中缺少文档和注释,因此需要很长时间。我看到微软并没有费心在 C# 中实现 Http 堆栈,而是使用可靠的库——WinHttp 和 libcurl。不幸的是,将 libcurl 移植到 Mono 也是一项工作。从法律上讲,HttpClient 允许替换处理程序,创建替代堆栈。有一个适用于 iOS 的 CFNetwork 处理程序和适用于 iOS/Android 和其他平台的 ModernHttpClient。然而,ModernHttpClient 对我来说也不能作为直接替代品。有什么建议么?我的代码如下:

class Program
{
static void Main(string[] args)
{
var threadCancelationToken = new CancellationTokenSource();
var sl = new StatusLoop();
sl.HttpClientTimeout = int.Parse(args[0]);
sl.StatusFreq = int.Parse(args[1]);

Task.Run(async () => await sl.RunStatusLoop(threadCancelationToken.Token), threadCancelationToken.Token);
Console.ReadKey();
}
}

public class StatusLoop
{
public int HttpClientTimeout;
public int StatusFreq;

public async Task RunStatusLoop(CancellationToken cancellationToken)
{
// var handler = new HttpClientHandler
var handler = new NativeMessageHandler
{
Credentials = new NetworkCredential("username", "password"),
PreAuthenticate = true,
UseProxy = false
};

// var httpClient = new HttpClient(new NativeMessageHandler())
var httpClient = new HttpClient(handler)
{
Timeout = TimeSpan.FromSeconds(this.HttpClientTimeout)
};

httpClient.DefaultRequestHeaders.Add("Connection", "Keep-Alive");
httpClient.DefaultRequestHeaders.ExpectContinue = false;

ServicePointManager.ServerCertificateValidationCallback +=
(sender, certificate, chain, sslPolicyErrors) => true;

while (true)
{
try
{
var httpResponse = await httpClient.GetAsync("https://192.168.1.22/api/v1/system/status/", cancellationToken);
if (httpResponse.IsSuccessStatusCode)
Console.Write(".");
}
catch (Exception ex)
{
Console.WriteLine ("HttpClientGetStatus - exception\n\r" + ex.ToString());
}

Thread.Sleep(this.StatusFreq * 1000);
}
}
}

如果您在 Linux/Mac 上使用过替代 HttpClientHandler,请分享您的经验。

谢谢

最佳答案

有一个来源here但我不知道 nuget package 是否包含此 Unix 代码

关于c# - 用于 Linux/Unix 的替代 HttpClientHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33893202/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com