【.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」を実際のプロキシ アドレスとポートに置き換えてください。

このようにして、プロキシ情報を明示的に設定した後、.NET 6 では `HttpClient` が `HttpListener` と正常に通信できるようになります。

プロキシの構成方法は、プロキシの種類とネットワーク環境によって異なる場合があることに注意してください。上記が機能しない場合は、プロキシ設定を正しく理解し、`HttpClientHandler` で適切に設定していることを確認してください。

これが .NET 6 の「HttpClient」に関するプロキシの問題の解決に役立つことを願っています。他にご質問がございましたら、お気軽にお問い合わせください。

この意見が正しいかどうかはわかりませんが、コメント欄での議論を歓迎します~~~~ 

おすすめ

転載: blog.csdn.net/songhuangong123/article/details/131652302