【问题标题】:HttpClient: "HttpRequestException: An error occurred while sending the request"HttpClient:“HttpRequestException:发送请求时出错”
【发布时间】:2021-05-27 23:07:14
【问题描述】:

我正在尝试使用 HttpClient 获取图像,但出现此错误:

HttpRequestException: 发送请求时出错

将 WebClient 与 DownloadData 方法一起使用,效果很好。

var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler))
{
    client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36");
    client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8");
    client.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate");
    client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 Safari/537.36");
    client.DefaultRequestHeaders.Add("Accept-Language", "pt-BR,pt;q=0.8,en-US;q=0.6,en;q=0.4");
    client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
    client.GetAsync("cookieGenerateUrl").Wait();

    client.DefaultRequestHeaders.Remove("Accept");
    client.DefaultRequestHeaders.Add("Accept", "image/webp,image/apng,image/*,*/*;q=0.8");
    var imagem = client.GetByteArrayAsync(imageUrl).Result;
}

HttpClient 类上的 WebClient.DownloadData 等价于什么?

【问题讨论】:

  • 提供更多数据。客户端对象的其他属性是什么?
  • 停止在异步调用中使用 .Result.Wait()。等待回复。请参阅Async/Await - Best Practices in Asynchronous Programming
  • @mason 控制台应用程序有什么不同吗?如果我使用await,主线程会发生什么?
  • 在控制台应用程序中,最好使用 C# 7.1,这样您就可以使用异步 main 方法。

标签: c# .net-core


【解决方案1】:

这里的问题可能是您在调用 client.GetByteArrayAsync 时没有正确处理 awaitable。

解决方法是:

var res = await client.GetByteArrayAsync(url);

byte[] arr;
client.GetByteArrayAsync(url).ContinueWith((x) => arr = x.Result);

【讨论】:

  • 好的,它是有效的,但我不知道为什么。你能解释一下吗?为什么我不能在 GetByteArrayAsync 之后只使用 .Result?
  • 因为它是异步的,并且在您请求结果时它还不存在
  • 它没有。我建议了解更多关于 async 和 await
猜你喜欢
  • 2022-12-20
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多