HttpWebRequest向路由器提交基本身份驗證_Windows教程
服務(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);
}
}
- 相關(guān)鏈接:
- 教程說明:
Windows教程-HttpWebRequest向路由器提交基本身份驗證。