6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

dotnet coreにおけるhttp proxy設定に関する注意点

Posted at

はじめに

dotnet coreの2.1と3.0以降で、System.Net.Http.HttpClientのデフォルトhttpプロキシに関する挙動が異なるところがあったので記述する。

dotnet core 3.0以降

正式な仕様としては https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient.defaultproxy?view=netcore-3.1 に記載がある。訳すと、

  • 明示的な指定がない場合、全てのプラットフォームで環境変数の値をまず確認する
    • http_proxy,https_proxy,all_proxy,no_proxyの三つ(大小文字問わず)
  • ない場合は、OSごとに処理が異なる
    • linuxはプロキシなしとして扱う
    • winはOS設定(winhttpとwininetの設定)を使用する
      • winhttpとwininetの両方で設定があった場合、wininetの方の設定が優先される
    • macはOS設定を使用する

dotnet core 2.1

HttpClient.DefaultProxyは2.1に存在しないため他にないか探したが、ドキュメントには存在しなかった。
自分で調べた結果、まとめると、

  • linuxの場合は環境変数のみ
  • winの場合は環境変数は無視され、OS設定(winhttp,wininet)を使用する
  • macの場合はシステム設定は無視され、環境変数のみ使われる

という具合のようだ。

主な差異

  • winの場合、netcoreapp3.0の時は環境変数を優先して使用するが、netcoreapp2.1では考慮もされない
  • linuxの場合は挙動は同じ
  • macの場合は、netcoreapp2.1ではOS設定が無視される

まとめ

プロキシ設定というのは見過ごされやすい盲点になるので、挙動の違いは把握しておきたい。
特にmacは持ってないのでソースベースの解析になるが、間違っていたら指摘希望。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?