HttpWebRequest向路由器提交基本身份驗證_Windows教程

      編輯Tag賺U幣
      HttpWebRequest向路由器提交基本身份驗證

        服務(wù)端IIS設(shè)置為不允許匿名訪問,只選擇了基本身份驗證,客戶端使用HttpWebRequest發(fā)送一個get請求,請求一個頁面。

        基本身份驗證,客戶端直接把用戶的用戶名和密碼簡單的轉(zhuǎn)換為base64編碼后發(fā)送到服務(wù)端,屬于明碼傳送,不具安全性。

       

      看一下整個請求響應(yīng)過程:

      1.1.    第一次HttpWebRequest先以匿名發(fā)送http請求

      1.2.    服務(wù)端返回?zé)o授權(quán)回應(yīng)
      服務(wù)端IIS設(shè)置為不允許匿名訪問,要求基本身份驗證,所以服務(wù)端返回?zé)o授權(quán)回應(yīng),

      同時在http頭加了個WWW-Authenticate: Basic realm="2003base" 頭,Basic表示要求基本身份驗證。

      1.3.    HttpWebRequest發(fā)送base64格式的用戶名和密碼
      HttpWebRequest收到Basic的驗證頭后,就把NetworkCredential提供的用戶名和口令鏈接起來,轉(zhuǎn)換成base64編碼,直接發(fā)送到服務(wù)端。

      Base64編碼用戶名和密碼看上去是這樣的:Y2hua2luZzpwYXNzd29yZA==

      經(jīng)過轉(zhuǎn)換后,可以看到用戶名和密碼是:chnking:password

      代碼:

      /// <summary>
             
      /// 路由器設(shè)置
            
      /// </summary>

             
      /// <param name="userName">路由器登錄用戶名</param>
             
      /// <param name="password">路由器登錄密碼</param>
            
      /// <param name="url">操作路徑</param>
              public static void RouterSet(string userName, string password, string url)
              {
                 
      try

                  {  
                      HttpWebRequest request
      = (HttpWebRequest)HttpWebRequest.Create(url);

                      request.Method
      = "get"
      ;
                      request.ContentType
      = "application/x-www-form-urlencoded"
      ;
                      request.Credentials
      =
      CredentialCache.DefaultCredentials;

                     
      //獲得用戶名密碼的Base64編碼

                      string code = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", userName, password)));

                     
      //添加Authorization到HTTP頭

                      request.Headers.Add("Authorization", "Basic " + code);


                      HttpWebResponse response
      =
      (HttpWebResponse)request.GetResponse();
                      response.Close();

                  }
                 
      catch
      (Exception ex)
                  {
                      LogHelper.logerror.Error(
      "路由器設(shè)置錯誤:"+
      ex.Message);
                  }
              }

      來源:網(wǎng)絡(luò)搜集//所屬分類:Windows教程/更新時間:2011-12-08
      相關(guān)Windows教程