python傳送get或post請求以便幹一些趣事
適合級別:入門,中級
關鍵字 :python, http, get, post, 安全, 模擬, 瀏覽器, 驗證碼,識別, google
1 此文不是關於黑客或安全話題的!
2 使用指令碼程式傳送get或post,這是最簡單也是最常見最頻繁的事情之一;那為什麼我還要yy一遍呢? 因為不只是熟能生巧,熟還能生出好多東西來呢,就看是和誰生!
3 我想有必要再次溫習一遍http協議及get/post請求相應內容與格式等基礎知識的;不過我不會在此簡述,希望你去看看那些諸如「當你使用瀏覽器開啟乙個url,究竟發生了哪些事」這樣的文章吧!
4 python傳送get/post可能涉及的lib: urllib, urllib2, cookielib ;至於其他的諸如處理html等不在本話題範圍內:)
5 請求google.com的首頁:
python**
>>> import urllib2
>>> print urllib2.urlopen('').read()
以上是hello world級別了;但geek程式設計師往往會通過此發現,列印出的東西,因url而異 --- 廢話,當然不是說內容,是指風格!!! 優秀的站點,其原始碼往往也在各個方面高乙個水準,包括unicode編碼、安全、效能等等方面。
python**
open('d:\\temp\\google-logo.gif','wb').write(urllib2.urlopen('').read())
6 模擬瀏覽器開啟某個登入url,並通過post成功登入:
(1 這個問題的情況比較特殊,所以我打算寫乙個稍微全面點的,以盡可能涵蓋常見情況,包括但不限於:cookies ,密碼加密傳送,https,簡單驗證碼,ip限制,充分假裝瀏覽器等等。
(2 post請求傳送的最小形式:
(3 一些注意事項或最佳實踐:
a是否因為cookie的問題而post失敗,最好使用真的瀏覽器登入,然後使用firebug這樣的除錯工具來檢視實際的請求與響應頭資訊,以及cookie資料!
b除了cookie之外,還有很多其他方法來達到一些安全或其他目的;cookie能儲存的資料就4k,而且對客戶端完全開放。
c其實第一件重要的事情是閱讀原始碼,肉眼解析出form及其action和引數等;搞清楚邏輯,再去模擬;但這一步往往是最開始的鬥智鬥勇階段;有些程式設計師總是使用小把戲來調戲你,比如追加無意義引數,追加隨機數並命名為看上去像業務資料的變數等,還有人喜歡玩數學,比如搞質數運算等。
d驗證碼問題:分很多種,有的程式設計師比較嫩,所以你可以分析下繞過;而一般的安全驗證碼,則需要你自己多請求一些驗證碼回來建庫,做特徵識別;至於很**的驗證碼,建議你放棄這個思路,不要非去識別不可!
e網上流傳的discuz!模擬登入,其實都大多是理論;真正的程式都在那些專業發帖公司那裡。
f我本來想貼乙個真實的**出來,但是擔心和諧問題,所以還是作罷!
7 熟練地掌握這些東西可以做什麼?
8 其實只要你夠geek,幾乎能用curl搞定大多數問題。不過往往,我們更應該將精力放在解決問題上,而不是解決問題的工具上!
2011-6-7 更新
關於驗證碼的問題:
1 有很多很多的人都想搞這個驗證碼,比如想破解,比如想寫機械人,等等
2 驗證碼的問題我覺得就兩張思路: 繞過,識別; 其中繞過的條件是機制本身有漏洞,識別又分自動識別和人工識別
3 不是所有場合都一定需要破解驗證碼才能繼續,比如有的時候只需要人工識別即可: 乙個半自動化的機械人,在需要填寫驗證碼時,把驗證碼給出(甚至可以傳送到email或者手機上),人工識別並返回,機械人提交並繼續工作 - 這是很理想也很底代價的方式之一 。
當然,如果你非要破解驗證碼不可,那就搞特徵庫並比對識別嘍。具體思路也很簡單,而且個人建議不要重頭來寫,用開源的即可:
1 大量讀取驗證碼,建立原始資料庫;
2 分析並提取特徵,比如有的驗證碼很簡單,就幾個數字而已,你抓2w個拿下來分析一下,基本**不離十了,都可以識別出;
3 程式裡遇到驗證碼的時候,拿去特徵資料庫比對,得到結果。
4 主意事項:比如中字元的分隔,比如容錯,比如干擾因素的排除,比如對於類似google驗證碼的那種扭曲等變換,就要麻煩了。。。
python傳送GET或POST請求以便幹一些趣事
python傳送get或post請求以便幹一些趣事 適合級別 入門,中級 1 此文不是關於黑客或安全話題的!2 使用指令碼程式傳送get或post,這是最簡單也是最常見最頻繁的事情之一 那為什麼我還要yy一遍呢?因為不只是熟能生巧,熟還能生出好多東西來呢,就看是和誰生!3 我想有必要再次溫習一遍ht...
Python使用Request傳送POST請求
http協議規定post請求的資料必須放在訊息主體中,但是並沒有規定編碼方式,因此可以使用多種方式對其進行編碼。伺服器端通過請求頭的中content type欄位來獲知請求的訊息主體以何種方式編碼。具體的編碼方式包括 multipart form data 示例 import requests im...
curl模擬http傳送get或post介面測試
curl模擬http傳送get或post介面測試 可參照 一 get請求 curl i 顯示全部資訊 curl l 只顯示頭部資訊 curl v 顯示get請求全過程解析 wget 也可以 二 post請求 curl d param1 value1 m2 value2 三 json格式的post請求...