【.Net】我用HttpListener监听了一个地址,但是HttpClient却掉不通?

背景

        我用HttpListener本机监听了一个端口,然后有用RestSharp写了一个HttpClient,之前用net4.8写的,后升级为6.0。

        升级后发现,HttpClient掉不通HttpListener了。直接返回502。 服务端完全就接收不到信息。

无奈,我还是把版本退回到net4.8。

解决

        最近,我又使用了一个6.0的项目,再次直面这个问题,最终发现是代理的问题,由于我长期开着网络代理软件,后把代理软件关闭后这个问题就解决了

至于原因,网络上没有找到相关的内容,于是我问了下GPT,回答如下:

可能的原因是在 .NET 4.8 和 .NET 6 中对于默认的网络配置有所不同。

在 .NET 4.8 中,`HttpClient` 默认使用系统级的代理配置。如果你的计算机上有全局代理设置或代理软件运行,并且在 .NET 4.8 中正常工作,那么 `HttpClient` 会自动使用该代理进行网络请求。

然而,在 .NET 6 中,默认的行为有所改变。.NET 6 引入了基于 SocketsHttpHandler 的新的默认 `HttpClient` 实现,它在默认情况下不会使用系统级代理配置。这意味着如果你的计算机上有全局代理设置或代理软件运行,你需要在代码中显式配置 `HttpClient` 的代理信息。

在 .NET 6 中,你可以通过以下方式配置 `HttpClient` 的代理信息:


var httpClientHandler = new HttpClientHandler();
httpClientHandler.Proxy = new WebProxy("http://your-proxy-address:port"); // 替换为你的代理地址和端口
var httpClient = new HttpClient(httpClientHandler);

确保将 "http://your-proxy-address:port" 替换为实际的代理地址和端口。

这样,显式配置代理信息后,`HttpClient` 在 .NET 6 中应该能够正常与 `HttpListener` 进行通信。

请注意,代理的配置方式可能因代理类型和网络环境而异。如果上述方法不起作用,请确保你正确理解你的代理设置,并在 `HttpClientHandler` 中适当地进行配置。

希望这能帮助解决你在 .NET 6 中使用 `HttpClient` 的代理问题。如果你还有其他问题,请随时提问。

这个说法,不知道对不对哈,欢迎评论区讨论~~~~ 

猜你喜欢

转载自blog.csdn.net/songhuangong123/article/details/131652302