程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 使用MemberShip時 用HttpWebRequest抓數據

使用MemberShip時 用HttpWebRequest抓數據

編輯:關於ASP.NET

最近在做一個項目,因為是分層設計,為了各層之間解耦,我們采用了HttpWebRequest來抓取同域下 的文件數據(動態生成的)來生成新的對象.我們生成數據頁的handler都是以.do結尾的,以示區分.但是 這也帶來了問題,在使用HttpWebRequest抓數據時,通不過驗證.但是我們使用AJAX同樣也是.do結尾的啊, 卻可以使用,奇怪!網上找Membership的驗證原理,資料及其缺乏.多是設置cookie之類的,也試了好多次,均 不奏效!事實也證明,當我們禁用cookie時,membership認證也同樣起作用,設置cooke這條路走不通.陷入僵 局!

只好在分析,為什麼ajax請求行?而HttpWebRequest請求就不行呢?有什麼特殊情況.打開我們經典的調 試分析工具fiddler2.0,看看ajax傳了什麼

看到有.User一節的時候,我們眼睛一亮.或許給請求的頭加上一個.User一節就能認證了,說做就做

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create (requestUrl);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded;charset=UTF-8;";
request.Headers.Add(string.Format("Cookie:.User={0}",  FormsAuthentication.GetAuthCookie(HttpContext.Current.User.Identity.Name,  false).Value));



using (Stream stream = request.GetRequestStream())
{
     using (StreamWriter sw = new StreamWriter(stream))
     {
         sw.Write(param);
     }
}

string json = string.Empty;

using (Stream stream = request.GetResponse().GetResponseStream())
{
     using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
     {
         json = sr.ReadToEnd();
     }
}

運行,調試,全部通過,大功告成!

同理,如果碰到membership認證的網站,想抓網頁,可以先注冊一個用戶,然後用fiddler查看用戶 的.User這一節,加入你程序的頭裡,就能通過驗證了

總結:為什麼ajax能抓,而HttpWebRequest不能抓,原因可能是ajax是使用的js調用,而js是aspx頁面的 一部分,aspx頁面的請求當然能使用membership.而HttpWebRequest直接請求的是.do頁面,不受.net管 理.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved