模拟网页行为之实践篇三
現(xiàn)在來談下驗證碼圖片的獲取方式,帶有驗證碼的地方都會附帶有個刷新按鈕,而刷新按鈕的地方就是獲取驗證碼網(wǎng)址代碼。如果看過前面寫的《模擬網(wǎng)頁行為之工具篇》就會很容易定位到代碼位置。定位到代碼位置后看下圖:
基本可以看到的是獲取驗證碼的網(wǎng)址是:https://ipin.siren24.com/stickyCaptcha。但這還不夠,因為前篇我們還講過關(guān)于cookie的概念,需要帶有cookie去刷新驗證碼才是有效的驗證碼,但如何獲取cookie,看下圖:
可見cookie類型是hostonly的,hostonly就是說只能在當(dāng)前網(wǎng)頁獲取cookie。有了上述抓包分析,那么對驗證碼的流程有了基本的了解。
那么接下來的步驟分為
1.獲取https://ipin.siren24.com/stickyCaptcha的cookie,。
2. 帶cookie刷新驗證碼獲取圖片數(shù)據(jù)。
獲取hostonly的cookie,c++代碼實現(xiàn)如下:
std::string CWebLoginDlg::GetCookie( std::string url ) {LPSTR lpszData = NULL;DWORD dwSize=0; lpszData= new char[1];memset(lpszData,0, 1);retry: if (!InternetGetCookieA(url.c_str(), "", lpszData, &dwSize)){DWORD er = GetLastError();if (er == ERROR_INSUFFICIENT_BUFFER){delete []lpszData;lpszData = new char[dwSize+1];memset(lpszData,0,dwSize+1);goto retry;}else{ATLTRACE("cookie is null");}}std::string strCookieContent = std::string(lpszData, dwSize);delete [] lpszData;return strCookieContent; }參數(shù)即為:https://ipin.siren24.com/stickyCaptcha
若cookie為httponly類型,獲取的方式也不一樣,C++代碼如下:
std::wstring CWebLoginDlg::GetCookieEx( std::wstring url ) {LPWSTR lpszData = NULL;DWORD dwSize=0; lpszData= new wchar_t[1];memset(lpszData,0, sizeof(wchar_t));retry: if (!InternetGetCookieEx(url.c_str(), L"JSESSIONID", lpszData, &dwSize, 0x00002000, NULL)){DWORD er = GetLastError();if (er == ERROR_INSUFFICIENT_BUFFER){delete []lpszData;lpszData = new wchar_t[dwSize+1];memset(lpszData,0,dwSize+1);goto retry;}else{ATLTRACE("cookie is null");}}std::wstring strCookieContent = std::wstring(lpszData, dwSize);delete [] lpszData;return strCookieContent; }刷新驗證碼圖片數(shù)據(jù),我采用的方式是用curl庫,實際上所有網(wǎng)頁走網(wǎng)絡(luò)協(xié)議方式都可以借助curl來實現(xiàn),但這里只單純刷驗證碼圖片數(shù)據(jù)。上面步驟把cookie獲取到后,將其編輯成以下格式,然后將其作為參數(shù)cookie,傳入到獲取網(wǎng)頁返回數(shù)據(jù)函數(shù),c++代碼表示如下:
std::string cookie = GetCookie("https://ipin.siren24.com/stickyCaptcha"); char nline[1024]; sprintf_s(nline, sizeof(nline),"%s; domain=ipin.siren24.com; path=/; hostOnly", cookie.c_str()); m_pCurlClient->GetURLResource("https://ipin.siren24.com/stickyCaptcha", nline, ret);GetURLResource實現(xiàn)如下:
以上,驗證碼的圖片數(shù)據(jù)即可獲取。
總結(jié)
以上是生活随笔為你收集整理的模拟网页行为之实践篇三的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奇妙的安全旅行之DES算法(一)
- 下一篇: spring-boot发送邮件失败 Au