一般登陸網(wǎng)站時(shí)候首先要打開一個(gè)網(wǎng)頁(yè)對(duì)吧?
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、乳源ssl等。為數(shù)千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的乳源網(wǎng)站制作公司
那首先要 GET 一個(gè)網(wǎng)址。GetResponse后,得到的流就是這個(gè)頁(yè)面的源碼。
源碼里肯定會(huì)包含這個(gè)驗(yàn)證碼的提問(wèn)段(可能是個(gè)圖片的網(wǎng)址,也可能是個(gè) 5+5=? 之類的字符串之類的),可以分析一下這段代碼出現(xiàn)的位置,讓程序自動(dòng)尋找。找到這個(gè)圖片的網(wǎng)址,把這個(gè)圖片 GET 下來(lái),然后,就是orc識(shí)別或你人工識(shí)別咯。。。
建立ODBC數(shù)據(jù)源后,可以在Java程序中通過(guò)JDBC-ODBC接口連接數(shù)據(jù)褲:
//SQL Server
DriverManager.getConnection(''jdbc:sqlserver://主機(jī)\\實(shí)例名:端口號(hào);
DatabaseName=數(shù)據(jù)庫(kù)名'',''用戶名'',''密碼'')
在HttpWebRequest.GetResponse運(yùn)行完畢之后,就表示網(wǎng)頁(yè)已經(jīng)加載完畢了。
如果是異步獲取HttpWebResponse,那么在HttpWebRequest.EndGetResponse之后也表示網(wǎng)頁(yè)加載完畢了。
Cookie丟了
登陸的時(shí)候,把CookieContainer保存下來(lái),可以設(shè)置一個(gè)全局變量,然后再getBody的時(shí)候,
request.Cookiecontainer設(shè)置為這個(gè)CookieContainer即可
嘿嘿,試試下面這個(gè)api
Private?Const?INTERNET_COOKIE_HTTPONLY?As?Integer?=?H2000
SuppressUnmanagedCodeSecurity,?SecurityCritical,?DllImport("wininet.dll",?EntryPoint:="InternetGetCookieExW",?SetLastError:=True,?ExactSpelling:=True)
Friend?Function?InternetGetCookieEx([In]?Url?As?String,?[In]?cookieName?As?String,?Out?cookieData?As?StringBuilder,?[In],?Out?ByRef?pchCookieData?As?UInteger,?flags?As?UInteger,?reserved?As?IntPtr)?As?Boolean
End?Function
'''?summary
'''?獲取webbrowser登錄成功后的cookie,需要帶上登錄成功后的URL
'''?/summary
'''?param?name="url"/param
'''?returns/returns
SecurityCritical()
Public?Function?GetCookie(url?As?String)?As?String
Dim?size?As?UInteger?=?0
Dim?sb?As?New?StringBuilder
If?InternetGetCookieEx(url,?vbNullString,?Nothing,?size,?INTERNET_COOKIE_HTTPONLY,?IntPtr.Zero)?Then?'--?this?always?returns?false
If?size?=?0?Then
Return?Nothing
End?If
sb?=?New?StringBuilder(Convert.ToInt32(size)?+?1)
If?Not?InternetGetCookieEx(url,?vbNullString,?sb,?size,?INTERNET_COOKIE_HTTPONLY,?IntPtr.Zero)?Then
Return?Nothing
End?If
End?If
Dim?lastErrorCode?=?Marshal.GetLastWin32Error?'--?259
Return?sb.ToString()
End?Function
另外,再給你一個(gè)函數(shù)
'''?summary
'''?字符串型的cookie轉(zhuǎn)換成cookie型的cookiecollection
'''?/summary
'''?param?name="cookieStr"/param
'''?param?name="cookie"/param
'''?param?name="domain"/param
Public?Sub?StringToCookie(ByVal?cookieStr?As?String,?ByRef?cookie?As?CookieContainer,?ByVal?domain?As?String)
cookie?=?New?CookieContainer()
Debug.Print($"過(guò)程:{New?StackTrace().GetFrame(0).GetMethod.Name}?轉(zhuǎn)換cookie開始")
Try
Dim?cookstr?As?String()?=?cookieStr.Split(";"c)
Dim?cookieName?As?String?=?""
Dim?cookieValue?As?String?=?""
For?Each?str?As?String?In?cookstr
cookieName?=?str.Substring(0,?InStr(str,?"=")?-?1).Trim()
cookieValue?=?str.Substring(InStr(str,?"="),?str.Length?-?InStr(str,?"=")).Trim()
Dim?ck?As?New?Cookie(cookieName,?cookieValue)
'Debug.Print($"{cookieName}?=?{cookieValue}")
ck.Domain?=?domain
cookie.Add(ck)
Next
Debug.Print($"過(guò)程:{New?StackTrace().GetFrame(0).GetMethod.Name}?轉(zhuǎn)換cookie成功")
Catch?ex?As?Exception
Debug.Print($"過(guò)程:{New?StackTrace().GetFrame(0).GetMethod.Name}?{ex.StackTrace.ToString()}")
Finally
Debug.Print($"過(guò)程:{New?StackTrace().GetFrame(0).GetMethod.Name}?轉(zhuǎn)換cookie結(jié)束")
End?Try
End?Sub
類,是面向?qū)ο笏枷氲囊粋€(gè)產(chǎn)物。它的用途,就在于把事物高度抽象。比如說(shuō)游戲中的玩家,你可以定義一個(gè)玩家類,這個(gè)類,有自己的屬性和方法,玩家的生命值,等級(jí),金錢,等等等等,它可以有自己的方法,比如,可以跳躍,可以死亡。類,本身并不能存在于內(nèi)存之中,這就解釋了對(duì)象的問(wèn)題。類,實(shí)例化以后,對(duì)象誕生,真實(shí)的存在于內(nèi)存之中。你把一個(gè)玩家類實(shí)例化100次,誕生100個(gè)玩家在游戲中。這個(gè)關(guān)系,你可以簡(jiǎn)單的這么理解。