天天看點

java之httpclient點點補充-登入問題

本來有點不太想寫這篇文章,原因是寫了這個,就感覺web應用怎麼都可以自己寫代碼通路内部的資源資訊!不過出于技術本身的我還是考慮些點點東西,而且即使我不寫,這玩意也有,呵呵,前面一篇文章我提及到雙方要約定token來進行認證互動等等,如果你想通路某個網站内部的資源,而且是需要登入的,但是又想通過本地程式直接蹦進去,怎麼蹦呢?

辦法不是沒有,其實httpclient就是模拟一個浏覽器的功能,而登入的動作其實就是擷取到你的cookie,而httpclient本身有記錄cookie的功能,是以這并不難。

也就是說,你要用httpclient來模拟一個網站的登入,然後後續的操作;那麼你隻需要到那個網站的登入頁面中找到使用者名和密碼的标簽的name值,以及其action的目标位址,将其在本地開始進行模拟,标簽,并類似于上一篇文章中編寫使用者名和密碼并向action的目标位址發起的post操作(注意這裡的post應該是絕對路徑,而不是頁面看到的相對路徑),此時你就能擷取到你的cookie了;

那麼登入ok了,cookie擷取到了,如何儲存cookie呢?其實你根本不用儲存,因為httpclient已經幫你儲存了,接下來所有的動作,隻需要你使用同一個httpclient對象,它們的cookie就是一緻的,可以通過同一個httpclient對象發起多次post或get請求,這個時候内部想要請求什麼就請求什麼了。

貌似本文就結束了,要這麼簡單,我也不會專門抽出來寫了,其實上述方法隻能适合于一般的普通網站,如果網站的認證方法是https的,也就是你看到它的登入界面是https開頭的,那就不行了因為協定不一樣了,不過也是有辦法的,這也是本文需要闡述的重點,要做這個工作,httpcleint請換成4以上的版本,對應到的包有:commons-httpclient-4.1.3.jar以及httpclient-4.1.2.jar兩個包不是一樣的内容,在這裡這兩個包都需要(注意一下代碼為非u盾認證方式,u盾認證需要其他的代碼來支援)。

加上了這兩個包後,在程式開始部分import的内容應該包含:

ok。代碼細節上我不想多說,不過這段代碼去請求一個https的登入是絕對沒有問題的,可以将相應的url換成自己系統的,再試一試!雖然是這個功能,不過,我個人還是不建議這樣做,這樣做太張揚了,這裡僅僅為簡單探讨下,可以用它寫點程式實作遠端系統的本地自動化處理步驟。

另外驗證碼需要一些解析程式,相對較為複雜,而且可能解析會有問題,對這類問題我也不想研究太多,呵呵,本文說提及的這個程式也和驗證碼無關。