模拟网页行为之实践篇三
現在來談下驗證碼圖片的獲取方式,帶有驗證碼的地方都會附帶有個刷新按鈕,而刷新按鈕的地方就是獲取驗證碼網址代碼。如果看過前面寫的《模擬網頁行為之工具篇》就會很容易定位到代碼位置。定位到代碼位置后看下圖:
基本可以看到的是獲取驗證碼的網址是:https://ipin.siren24.com/stickyCaptcha。但這還不夠,因為前篇我們還講過關于cookie的概念,需要帶有cookie去刷新驗證碼才是有效的驗證碼,但如何獲取cookie,看下圖:
可見cookie類型是hostonly的,hostonly就是說只能在當前網頁獲取cookie。有了上述抓包分析,那么對驗證碼的流程有了基本的了解。
那么接下來的步驟分為
1.獲取https://ipin.siren24.com/stickyCaptcha的cookie,。
2. 帶cookie刷新驗證碼獲取圖片數據。
獲取hostonly的cookie,c++代碼實現如下:
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; }參數即為: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; }刷新驗證碼圖片數據,我采用的方式是用curl庫,實際上所有網頁走網絡協議方式都可以借助curl來實現,但這里只單純刷驗證碼圖片數據。上面步驟把cookie獲取到后,將其編輯成以下格式,然后將其作為參數cookie,傳入到獲取網頁返回數據函數,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實現如下:
以上,驗證碼的圖片數據即可獲取。
總結
以上是生活随笔為你收集整理的模拟网页行为之实践篇三的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 奇妙的安全旅行之DES算法(一)
- 下一篇: spring-boot发送邮件失败 Au