- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在寻找 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/
这是我得到的错误: Cannot initialize type 'HttpClientHandler' with a collection initializer because it does n
我需要将数据发送到需要证书授权的网络 API。但我不知道如何将证书添加到 .Net 4.5 中的处理程序。这是代码: // Import the certificate X509Certificate
我们有许多 .NET Core 2.1 服务和一些 .NET Framework 4.7.1 应用程序在客户的 Windows Server(我认为是 2016 年)机器上运行。客户设置了所有流量都需
我想使用 HttpClient 从我的 ViewModel 发送两个请求(首先是 GET,然后是 POST)。 GET 请求完成且没有任何错误。但是如果我发送 POST 请求我得到异常: {Syste
场景如下:用户使用证书身份验证连接到网络服务器,服务器正在调用其他服务,我想转发/发送我在服务器上收到的证书以通过服务对用户进行身份验证。 我在网络服务器上使用以下代码在 HttpClientHand
在 .net core 2.2(或更高版本)中,可以编写以下代码(在客户端)向启用了双向 TLS 身份验证的 REST 服务发送 json 请求并从中获取 json 响应: var clientHan
以下代码抛出“PlatformNotSupportedException”“此平台不支持操作” 它是一个 NET 标准库(尝试针对 1.4 和 2.0 进行编译),被作为 Web 应用程序运行的 .N
我有 10-150 个长寿类对象,它们调用使用 HttpClient 执行简单 HTTPS API 调用的方法。 PUT 调用示例: using (HttpClientHandler handler
当使用 HttpClient 实例和 HttpClientHandler 实例(.Net Framework,不使用 Core)时,是否可以稍后以任何方式访问 HttpClientHandler 实例
我目前正在配置我的 httpclientfactory这边走 HttpClientHandler httpClientHandler = new HttpClientHandler() { S
我有这个请求处理程序: var httpClientHandler = new HttpClientHandler { Proxy = new WebProxy(proxy.Address,
我想过用HttpClientFactory,但是调用的时候需要附上证书目前使用的是HttpClient,但是不知道怎么附上证书。 httpClient代码如下: HttpClientHandler h
我正在尝试将 Elasticsearch NEST 与 .NET Core 和我们的 Elasticsearch 实例结合使用。我们通过 SSL 连接,它有一个我们需要以编程方式接受的通配符证书。我想
我正在使用以下代码从使用 .Net Core 2.0 的 API 获取数据。 using (var handler = new HttpClientHandler() { Defaul
System.Net.Http.HttpClient和 System.Net.Http.HttpClientHandler在 .NET Framework 4.5 中实现 IDisposable(通过
在 中运行以下内容.NET 框架 4.7.2 控制台应用程序和 some_url指向我的 Windows 网络中使用 Kerberos 的服务器,我得到一个 HTTP 代码 200 背部: var h
我正在使用 Microsoft HTTP Client Libraries - PCL (通过 NuGet 安装)与公共(public) REST API 通信。因为我在公司防火墙后面,所以我需要在
我正在寻找 Mono HttpClient 堆栈的可移植替代品。可移植 Mono 版本 [常规 Mono 堆栈的一部分] 有错误。我一直在尝试修复影响我们项目的一个特定错误。由于异步操作所需的库的高度
我正在尝试使用 HTTP 客户端向网站发送表单。该网站然后根据我的请求返回一个包含数据的列表。该过程本身运行良好,但我必须执行 3 个请求,而当我在浏览器中手动执行时,一个请求就足够了。 在浏览器中,
代码如下: public static async Task DownloadPageWithCookiesAsync(string url) { HttpClientHandler hand
我是一名优秀的程序员,十分优秀!