我在用curl做一個使用者類比登陸,但是遇到了驗證碼。我在網上找了很多資料,但都沒有解決問題。我想,要類比登入的思路大概是這樣子的:
1、擷取頁面中的表單,類比填寫登入名稱和密碼;
2、從驗證碼圖片中得到驗證碼,類比填寫驗證碼;(這一步擷取驗證碼解決不了)
3、提交cookie和參數進行登入,儲存本地cookie;
其中第2步遇到了問題,怎麼會的驗證碼?使用圖片識別庫嗎?還是下載讓使用者手工輸入呢?或者還有其他的辦法?
希望做過這類需求的朋友幫幫忙,謝謝~
回複內容:
我在用curl做一個使用者類比登陸,但是遇到了驗證碼。我在網上找了很多資料,但都沒有解決問題。我想,要類比登入的思路大概是這樣子的:
1、擷取頁面中的表單,類比填寫登入名稱和密碼;
2、從驗證碼圖片中得到驗證碼,類比填寫驗證碼;(這一步擷取驗證碼解決不了)
3、提交cookie和參數進行登入,儲存本地cookie;
其中第2步遇到了問題,怎麼會的驗證碼?使用圖片識別庫嗎?還是下載讓使用者手工輸入呢?或者還有其他的辦法?
希望做過這類需求的朋友幫幫忙,謝謝~
火速解答
- 手工輸入
- 花錢買線上的api線上打碼
- ocr(不準確,簡單的驗證碼可以,但總體上指望不大)
你可以去 www.uuwise.com 這樣的網站,去瞭解一下驗證碼打碼的黑技術
- 如果手工打碼,用PHP帶Cookie取到驗證碼的值,再設
Header("Content-Type: image/jpeg");吐出來, 這裡你可以自己結合前端做些小的改善,例如用Ajax Long Poll或webSocket做個即時提醒的小東西,一旦產生新驗證碼,你的用戶端叮咚提示你打驗證碼,打完,把內容傳給CURL類,CURL再類比你把驗證碼傳給網站。 在PHP中這裡有個很強悍的類比庫,叫做snoopy.class.php。
- 如果驗證碼比較簡單(無扭曲、無幹擾線、非中文、字元長度是定長、每個驗證碼字元邊界距離等同、噪點小、字型不生僻或你能找到),也就是說,你覺得機器可以根據一定模式識別出來,那麼自己用PHP寫個OCR,或調用擴充,我不知道有沒有OCR擴充你自己找找。自己寫也簡單,我記得是先把圖片二值化,再把每個字母的地區拆分,計算黑色所佔比例,和已有字型庫對比,網上類似教程太多,自己實踐。
http://blog.csdn.net/ugg/article/details/3972368
http://jingyan.baidu.com/article/456c463b66e5320a583144b7.html
http://www.poboke.com/study/php-verification-code-identification-primary.html