日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

掌控POST(4)

 ipilipala 2016-06-14
 本帖最後由 michael3636 於 2015-5-1 04:55 編輯

Part 4




讓我們繼續(xù)我們的征途,相信每一個仔細看完前三篇文章的人.都對XHR對象都有了一定的認識,而不是像以前使用那樣照搬照寫,壓根不知道為啥這麼寫.好了廢話不多說了,進入正題,老規(guī)矩,先來點相關(guān)知識墊墊底:




  • 網(wǎng)頁上的時間: 玩網(wǎng)頁的時候,我們一般會碰上2種形式的時間:

  • Thu, 30 Apr 2015 12:05:28 GMT :這種類型的,這是個js格式的時間顯示模式,一般出現(xiàn)在服務(wù)器的返回頭部,雖然平時不常見,但是我們一看就能認識,處理也簡單,用Mid() Cdate() 函數(shù)我們就能很好的得到我們常用的vbs時間格式
  • 時間戳: 一般出現(xiàn)在"POST"的請求內(nèi)容或者"GET"的查詢字符串裡,一般看到一串很長的以"14"開頭的數(shù)字,我們就得考慮它是否代表時間,其實就是時間的純數(shù)字表現(xiàn)形式:定義是從1970年1月1日0點到目前為止的秒數(shù),它包含了年/月/日/時/分/秒的所有信息(js的時間格式的本質(zhì)就是從時間戳數(shù)字格式化而來的),根據(jù)定義我們很簡單的就能用按鍵寫出我們按鍵版的時間戳:
  1. t = datediff("s", "1970-1-1", now) - 3600 * 8
  2. //我們是8時區(qū)的,為了跟服務(wù)器時區(qū)統(tǒng)一,我們的減去8小時的秒數(shù)
複製代碼



好了.進入主題,今天的主題是: 用XHR登陸賬號(3種方法)

注意:本章節(jié)只說英文數(shù)字類的賬號密碼.不涉及中文或其他字符,因為這涉及到字符編碼問題,是個大話題,不是幾句話能講完的,我會在以後專門講到


  • POST方式(本質(zhì)是拷貝瀏覽器的登陸方式)

  • 我們打開火狐,進入按鍵綜合論壇版塊"http://bbs./forum.php?mod=forumdisplay&fid=17",如果賬號已經(jīng)登陸,請先退出賬號.填好我們的賬號和密碼,然後打開firebug.如圖1然後,點一下清除按鈕,確保firebug很乾淨(jìng),然後按下登陸按鈕,等待網(wǎng)頁載入完成.
  • 我了個去..firebug裡好大一坨,呵呵呵,不用管,拉到最上面,有一個"[新]綜合討論"文字,前面還有"+",點開這個"+",圖2
  • 現(xiàn)在我把我們需要用到的內(nèi)容摘入如下:


以下為本帖隱藏內(nèi)容

==============================

頭信息=>來自上傳流的信息:
Content-Length 68
Content-Type application/x-www-form-urlencoded
第一個:我們上傳的內(nèi)容的長度,由於賬號密碼長度的不一樣,可能我們很多人這個數(shù)據(jù)是不一樣的,這個具體的數(shù)字我們可用用len()函數(shù)搞定,具體形式是,len(上傳的內(nèi)容)
第二個:客戶端要告訴服務(wù)器的上傳的內(nèi)容的類型,上面的意思是,應(yīng)用類的,通過URL編標的,這個不需要去瞭解很深,到時候照搬就行了,這2個內(nèi)容XHR是不會自動幫我們加到請求頭去的,所以到時候我們得自己加上去

POST=>源代碼
username=我的賬號&password=我的密碼&quickforward=yes&handlekey=ls
這個相信我們只需要關(guān)注裡面的紅字即可

響應(yīng):

window.location.href='http://bbs.
/forum.php?mod=forumdisplay&fid=17';]]>

很明顯,這是我們登陸成功後服務(wù)器給我的反饋,也就是說,只要我們得到這個反饋.就說明我們登陸成功啦..那麼,登陸失敗的反饋是什麼呢?很簡單啊,退出賬號,故意打錯密碼,然後登陸,我們就能得到登陸失敗的反饋了,這些內(nèi)容有助於我們判斷是否登陸成功或者除了其他什麼狀況

==============================
心細的朋友估計要說了,這跟瀏覽器的表現(xiàn)對不上啊,瀏覽器登陸成功的話就直接跳回綜合論壇啦,而不是出來這個,為什麼呢?其實很簡單,這是XML封裝的一行js代碼,瀏覽器得到這段文本後執(zhí)行了這段代碼,這段代碼的意思是,讓瀏覽器當前窗口轉(zhuǎn)到網(wǎng)址"http://bbs.
/forum.php?mod=forumdisplay&fid=17",這不就是綜合論壇的網(wǎng)址麼.而這些代碼的執(zhí)行,都是在後臺的,我們是看不到的..這不就跟我們看到的實際情況對上號了麼...

對了,還差一個.那就是POST方式提交內(nèi)容的目標網(wǎng)址:
很簡單的操作,把我們的鼠標放到firebug的目標URL上,按下右鍵,點擊複製網(wǎng)址,我們就得到目標網(wǎng)址了,如下:
http://bbs./member.php ... submit=yes&inajax=1

好了,我們需要的消息都得到了.接下來可以寫代碼了,咋寫?很簡單啊..剛學(xué)嘛..傻瓜式複製,瀏覽器腫麼做我們就怎麼寫:

  • 去按鍵綜合論壇,綜合之前學(xué)到的知識,我們知道這個應(yīng)該是"GET"方式
  • 用POST方式登錄
  • 瀏覽器成功後回到綜合論壇了,XHR可不會執(zhí)行代碼..我們手動去唄,"GET"方式,


開寫,如下:
  1. //第一步:GET方式去綜合版塊
  2. Set http = CreateObject("WinHttp.WinHttpRequest.5.1")//創(chuàng)建XHR對象
  3. URL="http://bbs./forum.php?mod=forumdisplay&fid=17"
  4. http.open "GET", URL, false
  5. http.send
  6. If Not isEmpty(http.responsetext) Then
  7. MessageBox "第1步成功!!!"
  8. Else MessageBox "第1步失敗失敗"
  9. End If


  10. //第二步:POST方式登錄
  11. URL = "http://bbs./member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1"
  12. str = "username=Mic_test&password=password1&quickforward=yes&handlekey=ls"
  13. //上面的str是我們要發(fā)送的內(nèi)容,其中:mic_test是賬號,大家可以換成自己的,password1是密碼,大家可以換成自己的
  14. http.open "POST", URL, False
  15. http.setrequestheader "Content-Type","application/x-www-form-urlencoded" //加上2個header
  16. http.setrequestheader "Content-Length",len(str) //用函數(shù)取字符串長度
  17. http.send str//發(fā)送請求,帶著內(nèi)容
  18. If Not isEmpty(http.responsetext) Then
  19. MessageBox http.responsetext //看看返回的內(nèi)容是不是對得上
  20. Else MessageBox "第2步失敗失敗"
  21. End If


  22. //第三步:瀏覽器會自動去,我們...手動去,,
  23. URL="http://bbs./forum.php?mod=forumdisplay&fid=17"
  24. http.open "GET", URL, false
  25. http.send
  26. If Not isEmpty(http.responsetext) Then
  27. MessageBox "第3步成功!!!,扔進剪貼板"
  28. Plugin.Sys.SetCLB http.responsetext
  29. Else MessageBox "第1步失敗失敗"
  30. End If
複製代碼
啊哈.....看看剪貼板的內(nèi)容,圖3,成功啦....


等等,問題來了

  • 為啥我得到返回值:

window.location.href='http://bbs././';]]>
跟上面的對不上?雖然差不多但是有區(qū)別啊....
贊一下,兄弟或者姐們,你真細心,其實很好解釋的,因為這個對象它的提交header裡默認是不帶"referer"項目的,就是我們在之前說到的來源的,也就是說,這個對象它是不會主公告訴服務(wù)器我是從哪個網(wǎng)頁來的,呵呵呵.牛吧..要跟上面一樣也簡單啊.在第二步設(shè)置header的地方加一句代碼:
http.setrequestheader "Referer","http://bbs./forum.php?mod=forumdisplay&fid=17"
然後再執(zhí)行.這次是不是對上號了?,當然這是題外話,我們只要成功就行了,至於返回值具體是什麼內(nèi)容不重要不是麼?在實際應(yīng)用中這句代碼是多餘的,但是從這我們知道了一個這個對象的特性,它的請求header是不帶"referer"的,假若我們需要的話,我們可以隨意添加進行來源冒充,多好啊......



進一步思考:
瀏覽器去網(wǎng)頁沒辦法.不然沒法用登陸界面去登陸賬號,XHR沒這問題,是不是可以省了第一步呢?很簡單啊..既然有這想法.市實驗下就行了,把第一部分註釋掉,記得創(chuàng)建XHR哪行代碼別註釋掉啊.........我們再調(diào)試,代碼就不貼了.
啊哈...成功啦..我們不需要第一步啦...是啊是啊..萬事貴在嘗試嘛......XHR的優(yōu)點就開始凸顯了不是麼?雖然寫起來麻煩點不直觀,但是就效率而言,是瀏覽器所根本無法比擬的,多好的技術(shù)啊..

2."GET"方式


以下為本帖隱藏內(nèi)容

==============================

在 Part 2 我講到過很多時候"GET"和"POST" 可以互轉(zhuǎn)的,我們能否用"GET"登陸呢?這還不簡單.能不能的試試不就知道了麼,
截取上面的POST方式的 地址和內(nèi)容:
提交地址是: http://bbs./member.php ... submit=yes&inajax=1
提交內(nèi)容是: username=我的賬號&password=我的密碼&quickforward=yes&handlekey=ls
照葫蘆畫瓢我們把內(nèi)容接到地址裡去,看代碼:

==============================
  1. //"GET"登陸
  2. Set http = CreateObject("WinHttp.WinHttpRequest.5.1")//創(chuàng)建XHR對象
  3. //原來的地址
  4. URLold = "http://bbs./member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1"
  5. //原來的請求內(nèi)容
  6. str = "username=Mic_test&password=password1&quickforward=yes&handlekey=ls"
  7. URL=URLold & "&" & str //把2者連起來,看格式可以知道每個參數(shù)是用"&",連接的,所以我們再 2者之間加個"&"
  8. //上面的str是我們要發(fā)送的內(nèi)容,其中:mic_test是賬號,大家可以換成自己的,password1是密碼,大家可以換成自己的
  9. http.open "GET", URL, False
  10. http.send //發(fā)送請求,"get"不需要內(nèi)容,而且不需要設(shè)置header 多方便啊.保佑成功啊....
  11. If Not isEmpty(http.responsetext) Then
  12. MessageBox http.responsetext //看看返回的內(nèi)容是否登陸成功了...
  13. Else MessageBox "失敗"
  14. End If


  15. //去網(wǎng)址再次確認看看是不是真的登陸了
  16. URL="http://bbs./forum.php?mod=forumdisplay&fid=17"
  17. http.open "GET", URL, false
  18. http.send
  19. If Not isEmpty(http.responsetext) Then
  20. MessageBox "成功!!!,扔進剪貼板"
  21. Plugin.Sys.SetCLB http.responsetext
  22. Else MessageBox "失敗"
  23. End If
複製代碼
哈哈哈,激動吧.事實證明你成功了,,,,呵呵呵

需要著重說明的是:這個方式是否可以登錄得看服務(wù)器短校本代碼是腫麼寫的,你在按鍵成功了不代表你在任何地方能成功,所以得學(xué)會嘗試和實踐!!!!

3."Cookie"方式(登錄都省了,帶著cookie直接訪問網(wǎng)頁去!!!!)


以下為本帖隱藏內(nèi)容

==============================

按鍵論壇登錄裡有個自動登陸的複選框,相信很多人都隨手點了,派啥用的呢,,,很簡單啊,,你選了.明天一覺醒來來按鍵論壇,你就不用登陸啦,,直接就是在線狀態(tài),為啥啊,綜合我們前面所知道的知識不難推測,cookie是服務(wù)器唯一可以讓瀏覽器保存在硬盤裡的東西,瀏覽器能保證是登陸狀態(tài),肯定是cookie搞的鬼,事實也能證明這一點,我們清理下cookie的話...開了瀏覽器,按鍵又問我們要賬號密碼了....那要是我們的XHR帶了cookie去瀏覽網(wǎng)頁的話.會不會?,,,恭喜你,答案是,當然會.現(xiàn)在,就讓我們一步一步見證奇蹟吧:
先瞭解下cookie:
cookie是服務(wù)器唯一可以放在我們硬盤裡的信息,它是文本(當然是加密的),cookie只有服務(wù)器能改變(無恥的js代碼不算),服務(wù)器發(fā)佈命令,瀏覽器執(zhí)行命令,從而達到服務(wù)器控制cookie的目的.
cookie分2種,一種是放在硬盤的,一種是放在內(nèi)存的,放在內(nèi)存的,瀏覽器一關(guān)就消失啦
cookie是會過期的,過了保質(zhì)期的cookie瀏覽器會自動刪除的
cookie是鍵值對儲存的:格式是 鍵(項目)=值 ,每一個鍵值之間是用";"分割的
cookie的鍵名是唯一的,通一個網(wǎng)站的cookie裡不可能同時存在兩個a,值是可以改變的,瀏覽器裡 a=5,當某個時候服務(wù)器帶來新的a=6的時候,瀏覽器裡的a就會更新為6
服務(wù)器是文明的:它在返回頭裡用"SetCookie"來設(shè)定每個cookie的鍵值,一個"SetCookie"對應(yīng)一個鍵值,瀏覽器是粗魯?shù)?他們發(fā)送header的是說是用"Cookie",一股腦把所有的鍵值用";"分割扔給服務(wù)器

在XHR對象裡(哪個小弟不算啊,,,,,切記),cookie總是在內(nèi)存的,xhr對象會自動的維護cookie,如果我們需要,我們是可以隨意讓XHR在請求的時候帶上我們想讓它帶的cookie.但是我們無法把cookie放到XHR對象裡面,也就是說:我們需要XHR每次請求都帶上我們需要帶的cookie,我們只能無奈的每次都是用指令添加cookie,而不是這次添了以後,之後的每次都不用管了

==============================
詳細看cookie:

  • 服務(wù)器給瀏覽器的cookie:例子
Set-Cookieg :UmJ_2132_lastact=1430424271%09forum.py; expires=Fri, 01-May-2015 20:04:31 GMT; path=/

UmJ_2132_lastact : cookie的鍵(項目的名稱)
1430424271%09forum.py : 對應(yīng)鍵的值

後面的是針對這條cookie鍵的設(shè)置:
expires : 設(shè)定這個鍵的過期時間,過了這個點瀏覽器就會刪除這個cookie鍵值,如果沒有這個設(shè)置,cookie不進硬盤,只存在於內(nèi)存
有時候大家會看到一個很早以前的日期,這其實是服務(wù)器讓瀏覽器刪除cookie的方式,也是唯一的方式,把cookie設(shè)置為過去,就能刪除cookie鍵值
path: 代表這個鍵的作用域,這個不需要太過瞭解
httpolny: 如果看到這個,說明這個cookie很重要!!!!這個是告訴瀏覽器,這條代碼不許js看到,防止不良代碼竊取敏感信息,嘿嘿嘿,那麼說的話,,,賬號密碼有關(guān)的cookie豈不是帶有這個設(shè)定?是啊是啊..很有可能啊,
domaim:設(shè)定此條cookie鍵值的作用域名,瞭解下即可
關(guān)於cookie的屬性設(shè)定,大家注意下expires和httpolny屬性即可


準備:
大家打開firebug吧..向之前那樣登陸一次,不過麼,,這次請記得在"自動登陸"上打上鉤,成功後,,來到如圖:找Httpolny相關(guān)的屬性
圖4:
很簡單吧,一下就找到4個標識,其中2個沒有過期時間,標識的是"會話"(就是放在內(nèi)存的意思),肯定不是!!!,好吧..就剩下的有過期時間的2個貨了,,,寫在代碼試試
  1. Set http = CreateObject("WinHttp.WinHttpRequest.5.1")//創(chuàng)建XHR對象
  2. URL="http://bbs./forum.php?mod=forumdisplay&fid=17" //綜合版塊網(wǎng)址
  3. http.open "GET", URL, False
  4. //下面是設(shè)置請求頭的Cookie,記住.瀏覽器是粗魯?shù)?把兩條cookie寫在一起就行,只要鍵值,不要設(shè)置,cookie之間用";"分隔
  5. http.setrequestheader "Cookie","gUmJ_2132_saltkey=UQZSGyJs;gUmJ_2132_auth=9ec68C%2Bc5BTgrB2VemTNWm6%2B8NrVUZsayPnJaEmnf0WMs9pU4Ymw9cFhvQpilKkX3%2Bo28QVtcRiVP4pLVw1W53QmLTPu;"
  6. http.send //發(fā)送請求
  7. If Not isEmpty(http.responsetext) Then
  8. Plugin.Sys.SetCLB http.responsetext //扔進剪貼板,看看返回的內(nèi)容是否登陸成功了...
  9. Else MessageBox "失敗"
  10. End If
複製代碼
啊哈..成功啦...太無恥了..哈哈哈...只不過大家得切記.用這個方式必須得每次請求都寫上請求頭,至少在按鍵論壇是這樣的!!!

本節(jié)完了..下節(jié)講如何在又長又亂的源文件裡提起我們需要的信息和字符編碼的問題 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多