適合級別:入門,中級python
關鍵字 :python, http, GET, POST, 安全, 模擬, 瀏覽器, 驗證碼,圖片識別, google 程序員
1 此文不是關於黑客或安全話題的!數據庫
2 使用腳本程序發送GET或POST,這是最簡單也是最多見最頻繁的事情之一;那爲何我還要YY一遍呢? 由於不僅是熟能生巧,熟還能生出好多東西來呢,就看是和誰生!瀏覽器
3 我想有必要再次溫習一遍HTTP協議及GET/POST請求相應內容與格式等基礎知識的;不過我不會在此簡述,但願你去看看那些諸如「當你使用瀏覽器打開一個URL,究竟發生了哪些事」這樣的文章吧!安全
4 python發送GET/POST可能涉及的lib: urllib, urllib2, cookielib ;至於其餘的諸如處理HTML等不在本話題範圍內:)cookie
5 請求google.com的首頁:curl
以上是hello world級別了;但geek程序員每每會經過此發現,打印出的東西,因URL而異 --- 廢話,固然不是說內容,是指風格!!! 優秀的站點,其源碼每每也在各個方面高一個水準,包括unicode編碼、安全、性能等等方面。工具
下載GOOGLE的LOGO文件性能
6 模擬瀏覽器打開某個登陸URL,並經過POST成功登陸:ui
(1 這個問題的狀況比較特殊,因此我打算寫一個稍微全面點的,以儘量涵蓋常見狀況,包括但不限於:cookies ,密碼加密發送,https,簡單驗證碼,ip限制,充分僞裝瀏覽器等等。
(2 POST請求發送的最小形式:
(3 一些注意事項或最佳實踐:
A 是否由於cookie的問題而POST失敗,最好使用真的瀏覽器登陸,而後使用firebug這樣的調試工具來查看實際的請求與響應頭信息,以及cookie數據!
B 除了cookie以外,還有不少其餘方法來達到一些安全或其餘目的;cookie能保存的數據就4k,並且對客戶端徹底開放。
C 其實第一件重要的事情是閱讀源碼,肉眼解析出form及其action和參數等;搞清楚邏輯,再去模擬;但這一步每每是最開始的鬥智鬥勇階段;有些程序員 老是使用小把戲來調戲你,好比追加無心義參數,追加隨機數並命名爲看上去像業務數據的變量等,還有人喜歡玩數學,好比搞質數運算等。
D 驗證碼問題:分不少種,有的程序員比較嫩,因此你能夠分析下繞過;而通常的安全驗證碼,則須要你本身多請求一些驗證碼回來建庫,作特徵識別;至於很變態的驗證碼,建議你放棄這個思路,不要非去識別不可!
E 網上流傳的discuz!模擬登陸,其實都大可能是理論;真正的程序都在那些專業發帖公司那裏。
F 我原本想貼一個真實的代碼出來,可是擔憂和諧問題,因此仍是做罷!
7 熟練地掌握這些東西能夠作什麼?
答:這只是一種方式和途徑,或者說一種小伎倆;作什麼是你本身的事哦,能作什麼就是方法自己的事了!!!低調地說,我用這個幹過:刷票(投票的,刷 人氣的,耍點擊率的,抽獎的...);突破限制徹底下載整站數據(區別於爬蟲哦);專業數據庫的數據COPY;其餘不和諧的勾當。。。
8 其實只要你夠geek,幾乎能用curl搞定大多數問題。不過每每,咱們更應該將精力放在解決問題上,而不是解決問題的工具上!
2011-6-7 更新
關於驗證碼的問題:
1 有不少不少的人都想搞這個驗證碼,好比想破解,好比想寫機器人,等等
2 驗證碼的問題我以爲就兩張思路: 繞過,識別; 其中繞過的條件是機制自己有漏洞,識別又分自動識別和人工識別
3 不是全部場合都必定須要破解驗證碼才能繼續,好比有的時候只須要人工識別便可: 一個半自動化的機器人,在須要填寫驗證碼時,把驗證碼圖片給出(甚至能夠發送到email或者手機上),人工識別並返回,機器人提交併繼續工做 - 這是很理想也很底代價的方式之一 。
固然,若是你非要破解驗證碼不可,那就搞特徵庫並比對識別嘍。具體思路也很簡單,並且我的建議不要重頭來寫,用開源的便可:
1 大量讀取驗證碼圖片,創建原始數據庫;
2 分析並提取特徵,好比有的驗證碼圖片很簡單,就幾個數字而已,你抓2W個圖片拿下來分析一下,基本八九不離十了,均可以識別出;
3 程序裏遇到驗證碼的時候,拿圖片去特徵數據庫比對,獲得結果。
4 主意事項:好比圖片中字符的分隔,好比容錯,好比干擾因素的排除,好比對於相似google驗證碼的那種扭曲等變換,就要麻煩了。。。