使用C++下载网页文件
2016-10-26 22:32
176 查看
C++程序实现翻墙。翻墙主要原理是更改hosts方式实现,目标hosts文件可以通过github上的文件获得。C++下载网页到指定目录文件的方法,并替换本地hosts即可。
具体示例:
Gate.h
Gate.cpp
main函数入口:
具体示例:
Gate.h
class Gate { public: Gate()=default; ~Gate()=default; void getHttpFile(const char *saveFileName); private: const char * webAddr = "https://raw.githubusercontent.com/racaljk/hosts/master/hosts"; void downloadAndChange(const char *saveFileName); };
Gate.cpp
#include "Gate.h" #include<afx.h> #include<afxinet.h> #include<iostream> void Gate::getHttpFile(const char *saveFileName){ this->downloadAndChange(saveFileName); } void Gate::downloadAndChange(const char *saveFileName){ CInternetSession Session(_T("lpload")); Session.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000); Session.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 5000); Session.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 5000); Session.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 5000); Session.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 5000); DWORD dwFlag = INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_RELOAD; CHttpFile *cFile; char *pBuf = NULL; int nBufLen = 0; do { cFile = (CHttpFile*)Session.OpenURL((CString)webAddr, 1, dwFlag); DWORD dwStatusCode; cFile->QueryInfoStatusCode(dwStatusCode); if (dwStatusCode == HTTP_STATUS_OK){ DWORD nLen = 0; cFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, nLen); nBufLen = nLen; if (nLen <= 0)break; pBuf = (char *)malloc(nLen + 8); ZeroMemory(pBuf, nLen + 8); char *p = pBuf; while (nLen > 0){ int n = cFile->Read(p, (nLen < 2048) ? nLen : 2048); if (n <= 0)break; p += n; nLen -= n; } if (nLen != 0)break; CFile file((CString)saveFileName, CFile::modeCreate | CFile::modeWrite); file.Write(pBuf, nBufLen); file.Close(); } } while (0); if (pBuf) { free(pBuf); pBuf = NULL; nBufLen = 0; } if (cFile) { cFile->Close(); Session.Close(); delete cFile; } }
main函数入口:
#include"Gate.h" int main(){ Gate *m = new Gate(); m->getHttpFile("tmp.txt"); return 0; }
相关文章推荐
- Silverlight实用窍门系列:22.Silverlight使用WebService调用C++,Delphi编写的DLL文件【实例源码下载】
- 使用c++技术实现下载网页
- C#中网页文件下载——HttpWebRequest与HttpWebResponse的使用方法
- WebView使用(内存泄露+获取网页标题+js交互+调用浏览器下载文件+网页加载失败+清缓存)
- 使用C++实现功能下载文件
- c++ 下载网页(使用WinHttp)
- 【搜索引擎Jediael开发笔记2】使用HttpClient下载网页至本地文件
- 关于网页下载文件,使用数据流方式下载
- 【搜索引擎Jediael开发笔记2】使用HttpClient下载网页至本地文件
- 夺命雷公狗---微信开发19----使用网页调试工具调试该接口进行文件的上传与下载
- c++ 使用socket实现C/S端文件的下载传输
- 【搜索引擎Jediael开发笔记2】使用HttpClient下载网页至本地文件 分类: C_OHTERS 2014-05-19 15:07 1108人阅读 评论(0) 收藏
- [Winhttp]_[C/C++]_[使用win32 SDK的Windows HTTP Services(WinHTTP)通过代理下载网页]
- c++ 使用socket实现C/S端文件的下载传输
- 使用BHO技术检测IE在浏览网页时下载到IE cache中的文件
- c++ 使用socket实现C/S端文件的下载传输
- 使用applet通过网页从服务器端下载文件
- 无可救药的拖延症——关于asp网页使用Access及大图浏览效果以及爬虫登录及下载文件
- c++ 使用socket实现C/S端文件的下载传输
- 【搜索引擎Jediael开发笔记2】使用HttpClient下载网页至本地文件