仿InternetGetCookie自己解析Cookie文件
来源:互联网 发布:java nullpointer 编辑:程序博客网 时间:2024/05/06 01:28
转自:http://bbs.pediy.com/showthread.php?p=1228972
主要参考http://blog.csdn.net/whatday/article/details/7566310
代码:
#include <Windows.h>#include <Stdio.h>#include <Tchar.h>#include <Wininet.h>#pragma comment(lib, "Wininet.lib")typedef struct _COOKIE_FIELD{ TCHAR m_szKey[128];//键 TCHAR m_szValue[512];//值 TCHAR m_szDomain[128];//域 TCHAR m_szFlag[32];//标志 TCHAR m_szLowExpire[32];//过期时间的低32位 TCHAR m_szHighExpire[32];//过期时间的高32位 TCHAR m_szLowCreate[32];//创建时间的低32位 TCHAR m_szHighCreate[32];//创建时间的高32位} COOKIE_FIELD, *LPCOOKIE_FIELD;//获取Cookie的名称BOOL CookieGetUrlName(LPTSTR lpszUrl, LPTSTR lpszUrlName){ TCHAR szUserName[32]; DWORD cbUserName; TCHAR szHostName[128]; URL_COMPONENTS urlComponents; cbUserName = 32; GetUserName(szUserName, &cbUserName);//获取当前用户名 memset(&urlComponents, 0, sizeof(urlComponents)); urlComponents.dwStructSize = sizeof(urlComponents); urlComponents.dwHostNameLength = 128;//主机名长度 urlComponents.lpszHostName = szHostName;//主机名 if(InternetCrackUrl(lpszUrl, lstrlen(lpszUrl), ICU_ESCAPE, &urlComponents))//破解Url { lstrcpy(lpszUrlName, _T("Cookie:")); lstrcat(lpszUrlName, szUserName); lstrcat(lpszUrlName, _T("@")); lstrcat(lpszUrlName, szHostName); lstrcat(lpszUrlName, _T("/")); return TRUE; } return FALSE;}//获取Cookie的路径BOOL CookieGetPath(LPTSTR lpszUrl, LPTSTR lpszFilePath){ BOOL bRet; HANDLE hEnumHandle; LPINTERNET_CACHE_ENTRY_INFO lpCacheEntry; DWORD cbCacheEntry; TCHAR szCookieUrlName[256]; bRet = FALSE; CookieGetUrlName(lpszUrl, szCookieUrlName);//获取Cookie的名称 cbCacheEntry = 10240; lpCacheEntry = (LPINTERNET_CACHE_ENTRY_INFO)LocalAlloc(LMEM_FIXED, cbCacheEntry);//分配足够内存 hEnumHandle = FindFirstUrlCacheEntry(_T("cookie:"), lpCacheEntry, &cbCacheEntry);//查找Cookie缓存 if(hEnumHandle) { do { if(lpCacheEntry->CacheEntryType & COOKIE_CACHE_ENTRY)//应该是多余的 { if(lstrcmpi(lpCacheEntry->lpszSourceUrlName, szCookieUrlName) == 0)//判断是否是我们要找的Cookie名 { lstrcpy(lpszFilePath, lpCacheEntry->lpszLocalFileName);//复制Cookie的文件路径 bRet = TRUE; break; } } cbCacheEntry = 10240; } while(FindNextUrlCacheEntry(hEnumHandle, lpCacheEntry, &cbCacheEntry));//下一个 FindCloseUrlCache(hEnumHandle);//关闭句柄 } LocalFree(lpCacheEntry); return bRet;}//解析Cookie数据VOID CookieResolveData(LPTSTR lpszCookieData, LPCOOKIE_FIELD lpCookieFields, LPDWORD lpdwCookieField){ LPTSTR pStr; LPTSTR pStr2; LPTSTR pStr3; LPTSTR pStr4; LPTSTR pStr5; LPTSTR pStr6; LPTSTR pStr7; LPTSTR pStr8; LPTSTR pStr9; DWORD i; /* Cookie之间以*分隔,每个字段8行,只有0x0a没有0x0d */ pStr = lpszCookieData; for(i=0; *pStr; i++) { pStr2 = _tcschr(pStr, _T('\n')); lstrcpyn(lpCookieFields[i].m_szKey, pStr, pStr2 - pStr + 1); pStr2 += 1; pStr3 = _tcschr(pStr2, _T('\n')); lstrcpyn(lpCookieFields[i].m_szValue, pStr2, pStr3 - pStr2 + 1); pStr3 += 1; pStr4 = _tcschr(pStr3, _T('\n')); lstrcpyn(lpCookieFields[i].m_szDomain, pStr3, pStr4 - pStr3 + 1); pStr4 += 1; pStr5 = _tcschr(pStr4, _T('\n')); lstrcpyn(lpCookieFields[i].m_szFlag, pStr4, pStr5 - pStr4 + 1); pStr5 += 1; pStr6 = _tcschr(pStr5, _T('\n')); lstrcpyn(lpCookieFields[i].m_szLowExpire, pStr5, pStr6 - pStr5 + 1); pStr6 += 1; pStr7 = _tcschr(pStr6, _T('\n')); lstrcpyn(lpCookieFields[i].m_szHighExpire, pStr6, pStr7 - pStr6 + 1); pStr7 += 1; pStr8 = _tcschr(pStr7, _T('\n')); lstrcpyn(lpCookieFields[i].m_szLowCreate, pStr7, pStr8 - pStr7 + 1); pStr8 += 1; pStr9 = _tcschr(pStr8, _T('\n')); lstrcpyn(lpCookieFields[i].m_szHighCreate, pStr8, pStr9 - pStr8 + 1); pStr9 += 1; pStr = _tcschr(pStr9, _T('\n')); pStr += 1; } *lpdwCookieField = i;}//查询CookieBOOL CookieQuery(LPTSTR lpszUrl, LPCOOKIE_FIELD lpCookieFields, LPDWORD lpdwCookieField){ BOOL bRet; HANDLE hFile; LPVOID lpFileBase; DWORD dwFileSize; DWORD dwRetLen; TCHAR szPath[MAX_PATH]; bRet = FALSE; if(CookieGetPath(lpszUrl, szPath)) { hFile = CreateFile(szPath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile != INVALID_HANDLE_VALUE) { dwFileSize = GetFileSize(hFile, NULL); lpFileBase = LocalAlloc(LMEM_FIXED, dwFileSize); if(ReadFile(hFile, lpFileBase, dwFileSize, &dwRetLen, NULL)) { LPTSTR lpszCookieData; DWORD dwCookieData; dwCookieData = dwRetLen + 1; lpszCookieData = (LPTSTR)LocalAlloc(LMEM_FIXED, dwCookieData); //给Cookie结尾加个0 memcpy(lpszCookieData, lpFileBase, dwRetLen); memset(lpszCookieData + dwRetLen, 0, 1); //解析Cookie数据 CookieResolveData(lpszCookieData, lpCookieFields, lpdwCookieField); LocalFree(lpszCookieData); bRet = TRUE; } LocalFree(lpFileBase); CloseHandle(hFile); } } return bRet;}int _tmain(int argc,TCHAR *argv[]){ LPCOOKIE_FIELD lpCookieFields; DWORD dwCookieField; DWORD i; dwCookieField = 100; lpCookieFields = new COOKIE_FIELD[dwCookieField]; //查询Cookie CookieQuery(_T("http://bbs.pediy.com/"), lpCookieFields, &dwCookieField); for(i=0; i<dwCookieField; i++) { printf("键: %s\n", lpCookieFields[i].m_szKey); printf("值: %s\n\n", lpCookieFields[i].m_szValue); } return 0;}
0 0
- 仿InternetGetCookie自己解析Cookie文件
- 仿InternetGetCookie自己解析Cookie文件
- .Net/C# 应用程序直接读取本地 Cookies 文件 (由于 WinXP SP2 调用 API: InternetGetCookie 无果)
- .Net/C#应用程序直接读取本地Cookies文件(由于WinXPSP2调用API:InternetGetCookie无果)
- cookie解析
- Cookie解析
- cocos2d CCFileUtils读取文件后 解析自己的.ini文件
- httpclient 自己管理cookie
- 自己写的仿Log4j控制台打印记录写到文件的工具类
- 自己仿的天天动听
- 通过解析HTTP协议自己实现文件上传
- 使用dom4j解析XML文件(自己的代码)
- JS解析cookie
- cookie全解析
- Cookie和session解析
- Cookie深度解析
- Cookie深度解析
- Cookie深度解析
- xcoj1226-捕鼠
- 神经网络简介
- 冒泡排序法
- 相对布局的属性
- C语言内存分配
- 仿InternetGetCookie自己解析Cookie文件
- 几种排序算法的稳定性
- 进制转换
- POJ 2689 Prime Distance
- 第4周项目2-建设“单链表”算法库
- 第四周项目3——单链表应用(3)
- 带服务的音乐播放器
- 1.6
- Leetcode 70 Climbing Stairs