Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

C#

C#で「(407) プロキシ認証が必要です」エラーが出た時の対処方法

投稿日:2022年6月30日 更新日:

 

<目次>

(1) C#で「(407) プロキシ認証が必要です」エラーが出た時の対処方法
 (1-1) エラー事象
 (1-2) 原因
 (1-3) 対処例
 (1-4) 補足:ID/Passwordの直打ちを回避する方法

(1) C#で「(407) プロキシ認証が必要です」エラーが出た時の対処方法

C#で「(407) プロキシ認証が必要です」エラー(Proxy Authentication Required)が出た時の対処方法についてご紹介します。
 
(参考)プロキシとは?を知りたい方向けの記事↓
→Proxyの基本知識と確認コマンド~OSやブラウザ別の設定について

(1-1) エラー事象

C#でインターネットからファイルをダウンロードする処理を実行した際に、下記のエラーが発生しました。
 
(エラーメッセージ)
ハンドルされていない例外: System.Net.WebException: リモート サーバーがエラーを返しました:(407)プロキシ認証が必要です
 場所 System.Net.WebClient.DownloadFile(Uri address, String fileName)
 場所 System.Net.WebClient.DownloadFile(String address, String fileName)
 場所 TestDownloadApp.Program.Main(String[] args)
(図111)

(1-2) 原因

→Proxyサーバの認証設定を行っていないため

WebProxyクラスはプロキシ設定を保持しており、WebRequestクラスのインスタンスがリクエスト(http,httpsなど)を送る際にWebプロキシが使われているかどうか?の識別(及びプロキシ認証が必要な場合はその認証処理)をするために使用されます。
 
NetworkCredentialクラスでID/Passwordを設定し、WebRequestクラスのDefaultWebProxyプロパティ(≒メンバ変数)で、デフォルトで使用するプロキシサーバの設定(今回はID/Password)をセットします。
 
(構文)
WebProxy proxy = new WebProxy("[プロキシサーバのURL]", true);
proxy.Credentials = new NetworkCredential("[プロキシ認証のID]", "[プロキシ認証のパスワード]");
WebRequest.DefaultWebProxy = proxy;
(図121)
 

(1-3) 対処例

上記の構文を使って、試しにプロキシ認証を要する処理を行ってみます。例えば、インターネット上のファイルをダウンロードするといった処理です。下記のサンプルではZoomのソフトウェアをURLからダウンロードする処理をしていますが、その前段で今回紹介したProxy認証設定をしています。
 
・(0) Proxyサーバの認証設定を行う
→今回のポイント
・(1) Zoom Client のダウンロードを開始します
→テスト用のコード
 
(サンプルプログラム)
using System;
using System.Diagnostics;
using System.Net;
using System.Reflection;
using System.Threading;

namespace RP_ITxxxx_407Error_AuthenticateProxy
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                //### (0) Proxyサーバの認証設置を行う
                Console.WriteLine("---(0) Proxyサーバの認証設定を行う");
                //# WebProxyクラスのインスタンスを生成
                WebProxy proxy = new WebProxy("http://[プロキシサーバのアドレス]:8080", true);
                //# プロキシ認証に必要なID/Passwordの設定
                proxy.Credentials = new NetworkCredential("[プロキシ認証のID]", "[プロキシ認証のパスワード]");
                //# WebRequestクラスのDefaultWebProxyプロパティ(≒メンバ変数)で
                //# デフォルトで使用するプロキシサーバの設定(今回はID/Password)をセット
                WebRequest.DefaultWebProxy = proxy;

                Console.WriteLine("---(1) Zoom Client のダウンロードを開始します");
                //### (1)インターネットからzoomのインストーラをダウンロード
                //# WebClientクラスのインスタンスを生成
                using (var client = new WebClient())
                {
                    //# ZoomのインストーラをダウンロードするURLを引数に指定して、インストーラをダウンロード
                    client.DownloadFile("https://zoom.us/client/5.9.3.3169/ZoomInstaller.exe?archType=x64", "ZoomInstaller.exe");
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
            Thread.Sleep(2000);
        }
    }
}
(図131)

(1-4) 補足:ID/Passwordの直打ちを回避する方法

「Console.ReadLine();」でコンソールの入力内容を読み取りします。
(サンプルプログラム)
                //# プロキシ認証に必要なID/Passwordの設定
                //# コンソールから入力を促す
                Console.WriteLine("プロキシIDの入力:");
                //# ユーザーの入力値をString型の変数に格納
                string userName = Console.ReadLine();
                Console.WriteLine("プロキシPasswordの入力:");
                //# ユーザーの入力値をString型の変数に格納
                string userPass = Console.ReadLine();

                proxy.Credentials = new NetworkCredential(userName, userPass);

Adsense審査用広告コード


Adsense審査用広告コード


-C#

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

C#のデリゲートが分からない・・を解決!初心者向けになるべく分かり易く説明してみた

<目次> (1) C#のデリゲートが分からない・・を解決!初心者向けになるべく分かり易く説明してみた  (1-1) デリゲートとは?「関数へのポインタ」だけでは説明しきれない・・  (1-2) デリゲ …

Xamarin.Formsのプロジェクトの構成について~各ファイルの役割や概要について~

<目次> (1) Xamarin.Formsのプロジェクトの構成について  (1-1) プロジェクト構造の概要  (1-2) プロジェクトの初期ファイルの一覧 (1) Xamarin.Formsのプロ …

C#のdynamic型とは?使いどころやvarとの違いもご紹介

  <目次> (1) C#のdynamic型とは?使いどころやvarとの違いもご紹介  (1-1) dynamic型とは?  (1-2) dynamic型の使いどころ  (1-3) 動作確認 …

C#で型をStringからintに変更する方法~TryParseメソッドによる型変換~

<目次> (1) C#で型をStringからintに変更する方法  (1-1) 構文  (1-2) サンプルプログラム  (1-3) プログラム補足「'{0}’や'{1}’」に …

Xamarin.Formsで画面遷移を実装する手順について+ソースコードも紹介

<目次> (1) Xamarin.Formsで画面遷移を実装する手順について  (1-1) 遷移先ページの追加  (1-2) 画面遷移ロジック追加   (1-2-1) ボタンコントロールの追加   ( …

  • English (United States)
  • 日本語
Top