找回密码
 加入
搜索
查看: 62458|回复: 82

[原创] IE操作新手专用入门教学 (二) (或者说是心得……POST 跟 GET 的方法)

 火... [复制链接]
发表于 2011-11-15 23:00:52 | 显示全部楼层 |阅读模式
本帖最后由 kk_lee69 于 2011-11-16 00:16 编辑

一、前言
    先聲明: 這是新手專用的文章....老手就不用看了 呵呵!!
    其實對於AU3 我只是個新手,程式設計我也不會,IE操作是剛好最近工作上有需要才學的,由於學習的過程 跌跌撞撞所以想到,如果可以把自己學習到的心得
分享出來,讓其他新手也知道一些過程跟方法,我想多多少少也可以幫助到別人,這篇文章與其說是教學,不如說是我的一些小小的心得,希望可以給新手解決問題
的方向。這邊必須要先感謝 suiyefeng 兄的幫助.....花了很多時間幫助我 學到不少東西 解決了我的問題......是個好人 必須要給個讚喔!!

P.S 文章中如果有引用到某些朋友發表的語法....請多見諒 教學用而已...至於大名可能會遺漏 多多見諒

二 工具介紹

網上應該有很多可以分析跟偵測 網頁通訊的軟體跟工具....這邊介紹兩種比較常見 或者說方便取得的方式.......
HttpWatchPro 這個應該很多人會用吧!! 不過既然說了這是新手專用的教學....那就是仔細點的慢慢介紹.....軟件取的方式 請問GOOGLE 大神....
安裝完畢後.....開啟HttpWatchPro 然後進入到你想登入的畫面 輸入好資料 在你要按下確認之前.....請先 按下HttpWatchPro 的紀錄按鈕.....然後再按下網頁的登入按鈕....
這時候 HttpWatchPro  就會幫你記錄下 跟網站溝通的過程......如下圖



上面紅色圈圈就是應該注意的地方........上面有個URL的地方 就是你應該提交的網址對象......HEADERS 就是傳輸過程的內容,POSTDATA 就是提交的部份.....





從上面的資料裡面 其實都可以發現到 CLINE 端 跟 主機之間每個需要記錄的動作 跟溝通的資料  有POST 的  有GET的

第二個方式 是 使用IE9 本身內建的功能.........打開你的IE9 到你想要登入的網站畫面 按下 下圖的F12開發者工具....



然後打好想要登入的資料.........然後再開發者工具......選擇網路按下開始擷取.....然後在到 網站案下登入......這樣IE9的工具就會幫你記錄下登入的過程.....



再這裡一樣可以看到 各個動作 跟資料.....有POST  也有GET 的過程........提交的資料裡面都有.....






三 程式部份:
既然工具有了 我們需要了解的資料也有了......接下來該要開始寫AU3程式了.......
這裡必須要提到 republican  兄的 UDF 了........... http://www.autoitx.com/forum.php ... nHttp%5C_GetRespond
本來這個UDF 我也是看的模模糊糊的....更別提怎麼應用了..... 不過經過了一番折騰 ....終於搞懂了.....先把這個UDF 的資料準備好.....我們就可以開始試看看了.....
下面的範例  必須要感謝 suiyefeng 兄的幫助......他寫的出來的範本....

#include <Array.au3>
#include <WinHttp_GetRespond.au3>



$ATXT=UrlEnc("今日特餐") ;將今日特餐 轉為 傳輸的匙後會用到的專屬格式
$user = "A001"
$pwd = "9999"
$X2="http://www.2lwy1a54b.tw:8081/web/41215/1?p_p_id=DscMarquee&p_p_lifecycle=0&p_p_state=maximized&p_p_mode=view&p_p_col_id=column-1&p_p_col_pos=4&p_p_col_count=5&_DscMarquee_struts_action=%2Fdsc%2Fdscmarquee%2Fedit_marquee&_DscMarquee_redirect=%2Fweb%2F41215%2F1&_DscMarquee_marqueeId=84239"
$xiu = "http://www.2lwy1a54b.tw:8081/web/41215/1?p_p_id=DscMarquee&p_p_lifecycle=1&p_p_state=maximized&p_p_mode=view&_DscMarquee_struts_action=%2Fdsc%2Fdscmarquee%2Fedit_marquee"
                ;先連線到 登入的畫面 取的 某些資料  下面的語法 其實是 GET 因為 4 + 2 + 16 裡面沒有 1 
                $MyOpen=_WinHttpOpen()
                                ;  返回值                      句柄                       登入畫面 也就是要提交的網站網址                                                           函數模式定義  超時
                $rContext=_WinHTTP_GetRespond($MyOpen,"https://www.2lwy1a54b.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin&",4 + 2 + 16,50000)
                If @error Then 
                        MsgBox(0,@error,"出錯了")
                        Exit
                EndIf
                
                $lt = StringRegExp($rContext[0], 'name="lt" value="(.*)"', 3)
                If Not IsArray($lt) Then
                        Exit
                EndIf
                ;以上 是查詢的 語法 所以你會發現 語法只要這幾個.....後面其他的 參數都可以省略
                                
                                
                ;Post提交資料  這個就是要登入了......請注意 POST 語法 會比上面多出幾個參數
                $sPost = "username="&$user&"&passwordX="&$pwd&"&password="&$pwd&"<="&$lt[0]&"&_eventId=submit"
                                ;  返回值                      句柄                       登入畫面 也就是要提交的網站網址                                                           函數模式定義  超時  提交內容   COOKIE       傳輸資料的檔頭
                                $rContext=_WinHTTP_GetRespond($MyOpen,"https://www.2lwy1a54b.tw:8443/cas-web/login?service=http%3A%2F%2Fwww.2lwy1a54b.tw%3A8081%2Fc%2Fportal%2Flogin&",1 + 4 + 2, 50000, $sPost ,   -1  , "Content-Type: application/x-www-form-urlencoded")
                                If @error Then 
                        MsgBox(0,@error,"出錯了")
                        Exit
                EndIf
                
                                
                                
                                
                ;登入成功後會跳轉........以下是 取得跳轉後的資料 方便驗證是不是真的有辦法登入
                $location = StringRegExp($rContext[6], "Location: (.*)\n", 3)
                If Not IsArray($location) Then
                        MsgBox(64, 0, "用戶名或密碼錯誤")
                        Exit
                EndIf
                
                $rContext=_WinHTTP_GetRespond($MyOpen, $location[0], 4 + 2 , 50000)
                If @error Then 
                        MsgBox(0,@error,"出錯了")
                        Exit
                EndIf
                FileWrite("成功後的網頁.txt", $rContext[0]) ;注意 返回值 是陣列的



                ;跳到需要的頁面; 登入後 打算 轉到某個網頁去更新某些東西
                ;下面的語法是 POST 的標準模式.......請注意 提交的位置資料
                $rContext=_WinHTTP_GetRespond($MyOpen, $xiu,1 + 4 + 2, 50000,"_DscMarquee_marqueeId=84239&_DscMarquee_userId=76937&_DscMarquee_cmd=update&_DscMarquee_redirect=%2Fweb%2F41215%2F1&_DscMarquee_tabs1TabsScroll=&_DscMarquee_title=%E5%95%86%E5%93%81%E5%88%B0%E8%B2%A8%E8%A8%8A%E6%81%AF&_DscMarquee_content="&$ATXT&"&_DscMarquee_startDateYear=2011&_DscMarquee_startDateMonth=10&_DscMarquee_startDateDay=9&_DscMarquee_endDateYear=2013&_DscMarquee_endDateMonth=11&_DscMarquee_endDateDay=9", -1, "Content-Type: application/x-www-form-urlencoded")
                If @error Then 
                        MsgBox(0,@error,"獲取失敗")
                        Exit
                EndIf
                _ArrayDisplay($rContext) ;這個 可以看到 POST 後整個返回的資料....很多人問 怎麼確認成功沒有....返回值都會告訴你
                MsgBox(0, "內容", $rContext[0])
                MsgBox(0, "cookie", $rContext[3])
                MsgBox(0, "header", $rContext[6])                
                                FileWrite("頁.txt", $rContext[6])
                
                

                _WinHttpCloseHandle($MyOpen) 


Func UrlEnc($Sz_url)
        Local $str=StringTrimLeft(StringToBinary($Sz_url,4),2)
        Local $ret
        For $i=1 to StringLen($str) Step 2
                $ret &='%' & StringMid($str,$i,2)
        Next
        Return $ret
EndFunc


從上面的範例中 有幾點 必須要拿出來說明的........
首先 請注意到 POST 跟 GET 的語法參數  數目不一樣......
GET  只要    句柄 , 也就是要提交的網站網址 ,  函數模式定義 , 超時時間
POST  只要    句柄 , 也就是要提交的網站網址 ,  函數模式定義 , 超時時間 , 提交內容 , COOKIE ,  傳輸資料的檔頭

重點來了 如果需要某個網頁的資料 其實就是用 GET 的方法.... 只要提交網址....其他的參數照上面的範例打....理論上就可以有返回的值...而返回的網頁資料
就放在$rContext[0],如果網頁會自動跳轉....上面的範例一樣有取得跳轉的 語法.........
至於 如果需要提交登入的 也就是 POST 就需要 句柄 , 也就是要提交的網站網址 ,  函數模式定義 , 超時時間 , 提交內容 , COOKIE ,  傳輸資料的檔頭  
這幾個參數了. 其中絕大部分的參數 請參照上面語法範例裡面的.... 需要特別說明的是  .................

要提交的網站網址===>  請注意提交網址的正確性...一般來說 登入畫面的網址不會錯誤....不過 上面的範例來說  我是還跑到某個地方 去更新的某些資料 .....
                                   在這邊 遇到了不少麻煩....因為我ㄧ開始都是用$X2 這個變數裡面的網址去提交.....所以怎麼測試 都過不了,無法更新....後來才發現
                       網址錯誤... 應該是要用$XIU 這個變數裡面的網址 才是正確的......

提交內容 ====>  這個資料在工具介紹裡面都寫的很清楚的  可以找的到資料.....需要用那些工具去看....當然成是有分寫活的 跟寫死的, 活的通常是需要
                  先GET   然後從GET裡面的返回值  得到需要的資料....然後再去POST 如同上面範例第一段登入畫面的時候寫法.....可是我是比較偷懶....
                           反正先求有.... 在求好....上面範例最後一段的資料....我就是把利用工具查詢到的   資料直接 輸入在提交的內容..........

COOKIE ===>  這個比較特別.....我上面的範例都沒有用到....不知道是不是我網站的關係.....不過發現一個重點....譬如說登入畫面那段程式的語法...
                         其實GET的時候所得到的COOKIE 是 -1   這個可以由返回值查詢的到,所以POST的時候也是用-1,不然也可以試著把上面工具查詢
                 的到的COOKIE 輸入看看

傳輸資料的檔頭 ===>  其實如果從工具裡面看...傳輸的檔頭資料 其實很多 ,不過 在POST的時候 那些大概都可以省略....只要填入這個即可
                      "Content-Type: application/x-www-form-urlencoded"

希望上面的 一些心得 可以幫助新手......說了這是新手專用的教學.....說的淺 或者有說錯的  老手別見怪.....歡迎大家一起來討論.....如果覺得這篇文章對您有幫助....也請別忘了給個鼓勵感謝^^

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 8金钱 +310 贡献 +48 收起 理由
lpxx + 20 + 11
tryhi + 80 + 20
dennis_jmtw + 20
fbi911 + 20
qqgghh1 + 1

查看全部评分

发表于 2011-11-16 00:21:14 | 显示全部楼层
台湾的朋友?
 楼主| 发表于 2011-11-16 00:25:57 | 显示全部楼层
呵呵 是呀....因為要打很多字  就懶的轉成簡體了
发表于 2011-11-16 01:34:24 | 显示全部楼层
写得不错,谢谢分享!...
发表于 2011-11-16 08:31:29 | 显示全部楼层
回复 1# kk_lee69
找到了,呵呵!以后多发这样的教程啊!
发表于 2011-11-16 11:39:21 | 显示全部楼层
找到了。这样的话是可以作成批量什么注册还有什么刷票什么的?
发表于 2011-11-16 14:03:31 | 显示全部楼层
很好 也很强大 谢谢分享
发表于 2011-11-16 14:12:27 | 显示全部楼层
回复 6# 兔子先生


    面对有验证码的,始终中是个伤
发表于 2011-11-16 21:51:06 | 显示全部楼层
这个贴子标志着本论坛新手水平的整体提高!
发表于 2011-11-17 09:38:44 | 显示全部楼层
LZ很辛苦,半夜了还在发帖。而且看上去不错哦,多谢!
发表于 2011-11-17 16:42:22 | 显示全部楼层
受益匪浅,谢谢了,我等新手就需要这方面的东东!
发表于 2011-11-18 14:55:47 | 显示全部楼层
非常好的东西
发表于 2011-11-19 11:32:34 | 显示全部楼层
受益匪浅,谢谢分享!...
发表于 2011-11-20 14:06:18 | 显示全部楼层
比新手还新的我,先路过吧
发表于 2011-11-20 23:06:54 | 显示全部楼层
很详细,,支持一个,,
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-15 06:12 , Processed in 0.092691 second(s), 25 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表