PowerShell でプロキシのホスト名を IDNA ASCII に変換する
プロキシエンドポイントの利用者が Unicode ホスト名を解決できない場合に、国際化ドメイン名を IDNA ASCII 形式に変換します。
プロキシのホスト名は、表示形式に国際的な文字を含むことがあります。IDNA ASCII 形式を期待するクライアントやリゾルバーは、URL 全体を任意にパーセントエスケープしたコピーではなく、そのホスト名を変換したものを必要とします。
PowerShell では、.NET が変換を直接公開しています。
$mapping = New-Object System.Globalization.IdnMapping
$asciiHost = $mapping.GetAscii($unicodeProxyHost)
$endpoint = New-Object System.UriBuilder
$endpoint.Scheme = 'http'
$endpoint.Host = $asciiHost
$endpoint.Port = 8080
$proxy = New-Object System.Net.WebProxy($endpoint.Uri)
unicodeProxyHost はドメイン名だけです。ポートとスキームは別のままにします。生成されたプロキシを、リクエストを行う HTTP クライアントで使用します。
すでに解析済みの Uri では、IdnHost が IDNA 互換のホスト名表現を公開します。すでにエンコードされたラベルを繰り返しエンコードするのではなく、元のエンドポイントを確認してください。
解決エラーでは、プロキシのホスト名と宛先のホスト名を区別してください。一方を変換しても、もう一方の綴り間違いや欠落した DNS レコードは直りません。証明書の識別用に意図したホスト名も保持してください。任意の IP アドレスに置き換えると、接続の別の部分が変わってしまいます。