国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

用程序登錄Aps.Net頁面

2024-07-10 13:12:09
字體:
來源:轉載
供稿:網(wǎng)友
  在寫internet應用程序的時候,常常需要處理用戶登錄的情況。一般來說,對于這種情況,我們是使用程序來模擬用戶在web頁面上填寫用戶名、密碼并提交的過程。當用戶在web頁面上輸入了用戶名、密碼并提交之后,實際上是觸發(fā)了一個post請求,在這個請求中包含有用戶名、密碼等信息。因此,我們只要在程序中將相關信息封裝成一條post請求,并將它發(fā)送給web server,基本上就能實現(xiàn)登錄了。以mfc為例,下面的這段代碼模擬了一個登錄過程:

  cstring strheaders = _t("content-type: application/x-www-form-urlencoded");

  // name = "sam", password = "123", action = "submit"

  cstring strformdata = _t("name=sam&password=123&action=submit");

  cinternetsession session;

  chttpconnection* pconnection =

  session.gethttpconnection(_t("servernamehere"));

  chttpfile* pfile =

  pconnection->openrequest(chttpconnection::http_verb_post,

  _t("formactionhere"));

  bool result = pfile->sendrequest(strheaders,

  (lpvoid)(lpctstr)strformdata, strformdata.getlength());

  這個方法對于asp頁面很有效,但對于asp.net頁面,有時卻不起作用,這是為什么呢?

  為了搞清出asp.net頁面在處理登錄時與asp頁面有何區(qū)別,我們需要使用sniffer工具來跟蹤web服務器與瀏覽器之間的通訊。經(jīng)過跟蹤會發(fā)現(xiàn),asp.net頁面在用戶提交登錄信息之后,仍然是使用post請求將相關信息發(fā)送給服務器。所不同的是,處理用戶名、密碼等信息之外還多了一個__viewstate。如果在上面代碼中的strformdata中加上一個通過sniffer得到的__viewstate的話,就能夠成功模擬出整個登錄過程了。接下來的問題就是,我們應該如何獲得這個__viewstate呢?

  我們知道,asp.net頁面有一個viewstate屬性,asp.net用它來保存頁面的狀態(tài)信息,以便在頁面提交失敗時,能夠恢復頁面的狀態(tài)。它是通過頁面中的一個隱藏的域來定義的,如果通過瀏覽器來view source的話,可以看到它是如下的一行代碼

  它的value值正是我們所需要的,我們只要從登錄頁面中解析出這個__viewstate的value,我們的問題就能夠得到解決了。

  仔細看一下,viewstate的值是經(jīng)過編碼的,先不管它,直接將它從頁面中取出,和登錄信息一起組成post請求,發(fā)送給server,結果如何呢?失敗了l。對比一下sniffer的結果和頁面中viewstate的value,我們會發(fā)現(xiàn),它們之間還是有些許不同的。原來,頁面源碼中的viewstate值是經(jīng)過base64編碼的,而當它被發(fā)送給web server時,為了保證傳輸?shù)恼_,瀏覽器會將它轉換成url編碼,當web server接收到viewstate之后,當然會先將它從url編碼解碼為base64編碼再交給asp.net處理??磥砦覀冃枰獙iewstate的值在進行一邊url編碼處理,這樣就能夠成功模擬整個登錄過程了j。

  參考

  1. howto: simulate a form post request using wininet,微軟的kb文章,描述了模擬post請求的實現(xiàn)。

  2. asp .net maintaining the viewstate,viewstate的入門知識。

  3. viewstate: all you wanted to know,關于viewstate的深入討論。

  4. viewstate parser,想看看解碼后的viewstate是什么樣子嗎?試試這個parser。

  5. 博客堂中的相關討論,這是我在解決這個問題的過程中,在博客堂寫的blog。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 施秉县| 且末县| 湖南省| 永康市| 江津市| 开江县| 天峨县| 慈溪市| 姚安县| 濮阳县| 贵州省| 银川市| 罗城| 信丰县| 驻马店市| 武威市| 天全县| 柳江县| 筠连县| 滕州市| 武强县| 泽普县| 宁津县| 山阳县| 凭祥市| 浪卡子县| 佛山市| 日喀则市| 高雄县| 汾阳市| 穆棱市| 舟山市| 缙云县| 阳城县| 突泉县| 栖霞市| 新和县| 泰来县| 太白县| 榕江县| 惠来县|