我不得不使用好幾個系統
都是B/S結構的
每次登錄都需要輸入用戶名和密碼
覺得非常麻煩
考慮到其他同事也會有這樣的需求
不妨就寫個自動登錄的程序吧
之前
也考慮過使用單點登錄
幾經嘗試之後還是放棄了
我習慣使用Java
本能地開始尋找Java的解決方法
在Google中輸入
Java自動登錄
Java網頁模擬登錄
JavaPost登錄
結果倒是不少
內容也差不多
我嘗試很多次終究也沒有達到我預期的目標
後來
我都不知道這些代碼應該在jsp頁面中執行還是在c/s結構的程序中執行
但這些代碼確實管用
我們先分析一下代碼
Stringsurl=
;
URLurl=newURL(surl)
URLConnectionconn=url
openConnection()
conn
setDoOutput(true)
OutputStreamWriterout=newOutputStreamWriter(conn
getOutputStream())
Stringstr=
username=yourname&password=
;
out
write(str)
out
flush()
out
close()
到這裡
如果在C/S結構中
且參數正確
程序能夠成功登錄到這個oa系統
要看到結果
你可以通過下面的代碼將系統服務器返回的結果System
out
println()出來
Stringsling=
;
Stringscontent=
;
BufferedReaderin=newBufferedReader(newInputStreamReader(conn
getInputStream()
UTF
))
while((sling=in
readLine())!=null)
scontent+=in+
\r\n
;
System
out
println(scontent)
在C/S結構下
可以到得到控制台輸出了返回值
從返回內容裡可以看出程序已經成功登錄
但要是把這個網址浏覽器打開
還是得重新登錄
問題沒有得到根本解決
如果只是惡意注冊
到這裡應該就達到目的了
看樣子C/S結構下不容易實現網頁程序自動登錄
除非你在C/S程序中內嵌一個浏覽器
直接在這個浏覽器中自動訪問系統
應該沒有別的方法
主要問題在於我們沒有辦法共享Session
為了便於共享Session
我們只能在浏覽器中實現網頁自動登錄
通過上面的代碼在jsp頁面中測試
達不到預期目標
網頁自動登錄
就是希望程序自動填充用戶名和密碼
然後以Post方式提交給登錄頁面的Form所指向的action頁面或方法
我將系統的登錄頁面的源代碼保存成一個網頁
然後在username和password文本框中設置默認值
然後通過這網頁登錄系統
測試後
發現可行
接下來
你可能已經想到了解決方法
我們可以通過url
openConnection()建立連接
將返回的scontent打印出來
然後接著打印以下代碼
out
println(
\r\n
)
out
println(
document
getElementsByName(\
username\
)[
]
value=yourname;\r\n
)
out
println(
document
getElementsByName(\
password\
)[
]
value=
;\r\n
)
out
println(
document
forms[
]
submit()
\r\n
)
out
println(
\r\n
)
原理很簡單
通過login
jsp將登錄頁面的全部源代碼寫在當前頁面
然後使用javascript腳本將用戶名和密碼的值填充上
最後提交表單
這樣中
終於實現了自動登錄的目標
現在我通過一個特殊的網址
就可以自動訪問這個oa了
你可能注意到參數url
他的值是經過加密的
內容是用戶名和密碼
當然
你也可以加上有效期
即在有效期內這個鏈接才是有效的
才可以實現自動登錄
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26114.html