我们这里主要要实现的功能是通过输入用户名和密码登录网站并读取网页内容:
调用的库为WinInet.h
用到工具fiddler抓包工具。
- 先抓包获取所需参数。
- 登录网站https://www.oschina.net/,登录,并输入密码和用户名;
- 打开fiddler工具
- 点击登录网页,开始抓包参数;
- 参数如下:
- 完成抓包。
-
HINTERNET hInternet; HINTERNET hConnect; HINTERNET hRequest;
创建句柄;
- 初始化一个应用程序 hInternet = InternetOpen(_T("Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0""),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0); 这里用户代理参数是:user agent:后面一串字符串;
- 设置internet连接句柄
hConnect = InternetConnect(hInternet,_T("oschina.net"),INTERNET_DEFAULT_HTTPS_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,1);
oschina.net 是host,注意没有“www.” 部分https端口为443,http为80.
- 设置请求报文
hRequest = HttpOpenRequest(hConnect,_T("POST"),_T("/action/user/hash_login"),_T("HTTP/1.1"),_T("https://www.oschina.net/home/login?goto_page=http%3A%2F%2Fwww.oschina.net%2Fcode%2Fsnippet_1160014_23246"),lNULL,INTERNET_FLAG_RELOAD,0);
第五个参数为Referer值
- 向http服务器发送请求:
bSendResult = HttpSendRequest(hRequest,_T("Content-Type: application/x-www-form-urlencoded; charset=UTF-8 "),-1,pBuff,strlen(Buf);
其中Buf为cookie参数,邮箱与登录密码等信息,在Raw可以查看得到
email=xxxxxxxxxx&pwd=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&verifyCode=7bda&save_login=1&google_code=03AGdBq27D6UGJocNmdX-MTtLFIgzBZt-TLtThZchpRck-kg8JVyRzSPp8l0TX9QstJQ-T6d3CilfniziJNZYK2tj_0C482CP6h4tYSYzhD4TRKKify6RuS_s_1P92bQYsRegyML51wRVYROplk0dAE2XGuaO900zJG0mTnXFccXOeQy4qsFsE1slK9va6aES4amIgf62Xy_thtFw5PGvl4meJ_aV7Du2nnGYgR4z9F_AQMz7Hh0H_cN7ug9CziIXkX3kcTTG8XG-vyBGWYPJl1WqGE5z1J5urTzFnNjF4leFEoSV20x4thz3v8hYhhn695424KrNGdcsrq5-tJK7eV9OAU1ZHsCGNKyL-fKOlQLbAVmdjKGbQqgYz5uSmPXm-34YM7DhOaZXLlwIrTAM-1cYOfSAiPYXYSQ
至此,我们就通过用户名和密码登录了网站。
- 读取网页数据 BOOL reslut = HttpQueryInfo(hResourceHandle,HTTP_QUERY_RAW_HEADERS_CRLF,Buff,&dwInfoBufferLength,NULL); Buff为存放网页数据,dwInfoBufferLength为读取字节数目。
谢谢!
End.