python發送GET或POST請求以便幹一些趣事

 

適合級別:入門,中級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

 

 

Python代碼   收藏代碼
  1. >>> import urllib2  
  2. >>> print urllib2.urlopen('http://google.com').read()  

 以上是hello world級別了;但geek程序員每每會經過此發現,打印出的東西,因URL而異 --- 廢話,固然不是說內容,是指風格!!!  優秀的站點,其源碼每每也在各個方面高一個水準,包括unicode編碼、安全、性能等等方面。工具

 

 

下載GOOGLE的LOGO文件性能

 

Python代碼   收藏代碼
  1. open('d:\\temp\\google-logo.gif','wb').write(urllib2.urlopen('http://www.google.com/images/logo_sm.gif').read())  

 

 

 

6 模擬瀏覽器打開某個登陸URL,並經過POST成功登陸:ui

(1 這個問題的狀況比較特殊,因此我打算寫一個稍微全面點的,以儘量涵蓋常見狀況,包括但不限於:cookies ,密碼加密發送,https,簡單驗證碼,ip限制,充分僞裝瀏覽器等等。

 

(2 POST請求發送的最小形式:

 

Python代碼   收藏代碼
  1. >>> import urllib  
  2. >>> import urllib2  
  3. >>> import cookielib  
  4.   
  5. >>> cj = cookielib.CookieJar()  
  6. >>> opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))  
  7. >>> opener.addheaders = [('User-agent','Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)')]  
  8. >>> urllib2.install_opener(opener)  
  9. >>> req = urllib2.Request("http://xxoo.com",urllib.urlencode({"username":"root","password":"ROOTXXOO"}))  
  10. >>> req.add_header("Referer","http://xxoo.com")  
  11. >>> resp = urllib2.urlopen(req)  
  12. >>> print resp.read()  

 

 

(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驗證碼的那種扭曲等變換,就要麻煩了。。。

相關文章
相關標籤/搜索