首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

使用 Membership 時用 HttpWebRequest 抓資料

     編輯:關於ASP.NET

問題:HttpWebRequest 無法通過 Membership 驗證

分層架構下,需用 HttpWebRequest 抓取同域下 .do 動態頁面資料。AJAX 請求同樣是 .do 卻能通過驗證,HttpWebRequest 卻失敗。禁用 Cookie 後 Membership 仍生效,排除 Cookie 傳遞方案。

Fiddler 分析 AJAX 請求頭

AJAX請求頭包含 .User 節點

發現請求頭含 .User 節點,推測為 Membership 識別標記。

解決:手動加入 .User Header

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;
using (Stream stream = request.GetResponse().GetResponseStream())
using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
    json = sr.ReadToEnd();

測試通過。原理:AJAX 從 ASPX 頁面發出,屬 ASP.NET 管線自動攜帶驗證票據;HttpWebRequest 直接請求 .do 處理程式,繞過管線,需手動補上驗證票據。

通用技巧

針對任何 Membership 站點,先用瀏覽器登入,用 Fiddler 擷取 .User 值,加入程式請求頭即可繞過驗證抓取內容。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved