iT邦幫忙

0

如何用httpclient模似一个带验证码的post请求

请求的url :http://dynamic.12306.cn/TrainQuery/iframeLeftTicketByStation.jsp
但是这个页面需要用户输入一个验证码,所以首先得先请求一次,得到验证码,然后让用户输入这个验证码,把验证码的参数带上再次请求。请教各位高手,哪位有类似的经验。

1 個回答

12
wiseguy
iT邦超人 1 級 ‧ 2011-12-15 10:24:46
最佳解答

我很有經驗,每天都在用這招。不過樓主應該不是問我有沒有經驗而已吧?疑惑

因為樓主的問題該說的都沒說 (既沒說要用 script 還是用什麼程式語言寫,也沒說是不是要先用帳號密碼從某個 URL 登入,再來這個 URL 取資料 ),給的 URL 又 500 錯誤,無法連線,所以我只好用 script 的做法,兩次 wget 搞定:

<pre class="c" name="code">wget -nv -q --max-redirect 0 --save-cookie cookie.txt -post-data="user=user&password=password" http://somewhere/login.php
wget --max-redirect 0 --load-cookie cookie.txt -post-data="param=param" http://somewhere/getdata.php

基本上先登入後,網站會先在 cookie 中記錄 session,所以第一次登入記下 cookie (即 session),第二次 query 時,再把 cookie 帶入即可。至於樓主問的驗證碼,因為樓主也沒說這玩意兒是代在 cookie 中還是從網頁顯示出來。若是 cookie 那就直接上面這樣用即可,若是秀在網頁,則從第一次 query 的網頁內容抓出來,帶在第二次的 post-data 裡就行了。

看更多先前的回應...收起先前的回應...
igool iT邦新手 4 級 ‧ 2011-12-15 14:26:18 檢舉
igool iT邦新手 4 級 ‧ 2011-12-15 14:38:42 檢舉
fillano iT邦超人 1 級 ‧ 2011-12-16 08:44:29 檢舉

用同樣的cookie,這樣才是同樣的session。

fillano iT邦超人 1 級 ‧ 2011-12-17 11:39:55 檢舉

看起來就算收到驗證碼圖片,也還需要做OCR耶?這個部分怎麼做的阿?

igool iT邦新手 4 級 ‧ 2011-12-17 15:13:28 檢舉

我现在把验证码读取换成人工识别,把读取验证码请求的coolie保留下来,然后连同验证码一起提交,OK了。只是参数好像不太完整,继续研究中。在此特别感谢wiseguy,多谢你的提示。

我要發表回答

立即登入回答