[C#]使用 HttpWebRequest 瀏覽整合式 windows 認證環境的網站

[C#]使用 HttpWebRequest 瀏覽整合式 windows 認證環境的網站 – Incredible C Sharp- 點部落

先來看一下程式碼,標準 MSDN 的寫法:

01 void MailSenderTrigger(string btNo)
02 {
03 try
04 {
05 string URL = “http://www.urWebName.com/"; //欲瀏覽的特定頁面
06
07 //初始化 HttpWebRequest
08 HttpWebRequest myHttpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
09
10 // 設定內容類型
11 myHttpWebRequest.ContentType = “application/x-www-form-urlencoded";
12
13 //初始化 HttpWebResponse
14 HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
15 Stream msgstream = myHttpWebResponse.GetResponseStream(); //接收回傳訊息
16
17 Encoding encode = System.Text.Encoding.GetEncoding(“utf-8″); //設定編碼方式
18
19 //用 StreamReader 讀出回傳訊息
20 StreamReader readStream = new StreamReader(msgstream, encode);
21
22 string Syslog = “";
23 Syslog = readStream.ReadToEnd();
24 readStream.Close();
25 }
26 catch (Exception e3)
27 {
28 Response.Write(e3.ToString());
29 }
30 }

爬了一下文之後,找到好幾種解決的方法,
例如將頁面設定為可匿名存取(可以過,但是一般不建議這樣的方式),
或是在 web.config 中加入:(試過還是不行)
1

最後找到的解法是在 GetResponse() 之前加上這一段:
1 myHttpWebRequest.Credentials = CredentialCache.DefaultCredentials;

這樣就可以用當時使用者當時登錄的身分進行認證,
另外,DefaultCredentials 只記錄了程式運作時的一些認證訊息,
而不會紀錄使用者的帳號和密碼,所以對安全性來說有一定幫助,
如果硬要檢視詳細的內容,也只會得到一堆空字串,
這或許也是微軟的保護機制吧!?

如果你要指定一個身分去登錄網站的話,可以這樣做:
1 myHttpWebRequest.PreAuthenticate = true;
2 NetworkCredential netCreden=new NetworkCredential(“userName", “userPW"); //登入的帳號密碼
3 myHttpWebRequest.Credentials = netCreden.GetCredential(new Uri(URL), “authType"); //要瀏覽的網址以及認證類型
4

當然,如果你的認證方式是預設值且網址URL跟最前面相同的話,
最後一行可以簡寫為
1 myHttpWebRequest.Credentials=netCreden;

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *

What is 4 + 7 ?
Please leave these two fields as-is:
IMPORTANT! To be able to proceed, you need to solve the following simple math (so we know that you are a human) :-)