c++如何下载网上数据
来源:互联网 发布:如何给php代码加密 编辑:程序博客网 时间:2024/04/28 03:29
// ConsoleApplication3.cpp : 定义控制台应用程序的入口点。
//
//define _WIN32_WINNT 0x0502
#include "stdafx.h"
#include"windows.h"
#include <iostream>
using namespace std;
#define RECVPACK_SIZE 2048
bool DownloadSaveFiles(const char* url, const char* strSaveFile) {//下载文件并保存为新文件名
bool ret = false;
CInternetSession Sess(_T("lpload"));//这个在头文件afx.h里面
Sess.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 5000); //5秒的连接超时
Sess.SetOption(INTERNET_OPTION_SEND_TIMEOUT, 5000); //5秒的发送超时
Sess.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT, 5000); //5秒的接收超时
Sess.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT, 5000); //5秒的发送超时
Sess.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, 5000); //5秒的接收超时
DWORD dwFlag = INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_DONT_CACHE | INTERNET_FLAG_RELOAD;
CHttpFile* cFile = NULL;
char *pBuf = NULL;
int nBufLen = 0;
do {
try{
cFile = (CHttpFile*)Sess.OpenURL((CString)url, 1, dwFlag);
DWORD dwStatusCode;
cFile->QueryInfoStatusCode(dwStatusCode);
if (dwStatusCode == HTTP_STATUS_OK) {
//查询文件长度
DWORD nLen = 0;
cFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH, nLen);
//CString strFilename = GetFileName(url,TRUE);
nBufLen = nLen;
//cout << "nLen=" << nLen << endl;
if (nLen <= 0) break;//
//分配接收数据缓存
pBuf = (char*)malloc(nLen + 8);
ZeroMemory(pBuf, nLen + 8);
char *p = pBuf;
while (nLen>0) {
//每次下载8K
int n = cFile->Read(p, (nLen<RECVPACK_SIZE) ? nLen : RECVPACK_SIZE);
//接收完成退出循环
if (n <= 0) break;//
//接收缓存后移
p += n;
//剩余长度递减
nLen -= n;
//cout << "nLen=" << nLen << endl;
}
//如果未接收完中断退出
if (nLen != 0) break;
//接收成功保存到文件
CFile file((CString)strSaveFile, CFile::modeCreate | CFile::modeWrite);
file.Write(pBuf, nBufLen);
file.Close();
ret = true;
}
}
catch (...) {
cout << "异常" << endl;
break;//
}
} while (0);
//释放缓存
if (pBuf) {
free(pBuf);
pBuf = NULL;
nBufLen = 0;
}
//关闭下载连接
if (cFile) {
cFile->Close();
Sess.Close();
delete cFile;
}
return ret;
}
int _tmain(int argc, _TCHAR* argv[])
{
//测试用例
if (DownloadSaveFiles("https://nj02all01.baidupcs.com/file/610c518897d2b2c2e926dea4ec3479aa?bkt=p3-1400610c518897d2b2c2e926dea4ec3479aa6b0ee2f1000000005400&fid=1385520889-250528-801743656234146&time=1473385355&sign=FDTAXGERBH-DCb740ccc5511e5e8fedcff06b081203-VIHi1jRLlJUxd4i0s9LsZ747jhM%3D&to=nj2hb&fm=Yan,B,T,t&sta_dx=21504&sta_cs=1&sta_ft=exe&sta_ct=1&sta_mt=1&fm2=Yangquan,B,T,t&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=1400610c518897d2b2c2e926dea4ec3479aa6b0ee2f1000000005400&expires=8h&rt=sh&r=397272790&mlogid=5853974854801757197&vuk=1385520889&vbdid=3657123245&fin=helper.exe&fn=helper.exe&slt=pm&uta=0&rtype=1&iv=0&isw=0&dp-logid=5853974854801757197&dp-callid=0.1.1&hps=1&csl=0&csign=jq6%2BHtpAALBTzxw6VDBQA7h3fCY%3D", "f:/help.exe") == true)
{
cout << "下载成功" << endl;
}
else{
cout << "下载失败" << endl;
}
return 0;
}
- c++如何下载网上数据
- 网上下载和上传数据
- 网上下载和上传数据(一)
- 网上下载和上传数据(二)
- 网上下载和上传数据(转)
- 网上下载和上传数据(一)
- 网上下载和上传数据(二)
- Unity3D如何导入网上下载的unityPackage
- HOW TO:利用Excel的QueryTable下载网上数据
- 网上下载和上传数据(一) Montaque(原作)
- 网上下载和上传数据(二) Montaque(原作)
- 网上可供下载的重要数据大整理
- 用GitHub在网上存储方便下载的数据
- iOS之网上下载数据的两种方式
- 使用HttpUrlConnection的GET方式从网上下载数据
- 如何在xp中安装网上下载的IIS5.1
- 如何从网上检索和下载专利文献
- 从网上下载操作系统,如何刻成光盘
- 离群点检测方法综述
- C++ 如何获取目录下面的文件/文件的创建时间
- 第六章 枚举和switch语句
- android 官方DrawerLayout的介绍和使用
- 类的定义和调用-----以成绩为例
- c++如何下载网上数据
- java NIO、BIO、AIO全面剖析 (A)
- qt源码下载地址
- 解决Maven的“Missing artifact ……”问题
- leetcode-- Container With Most Water
- 常见的算法实现
- DreamWear 破解方法
- Android Material Design之CoordinatorLayout+AppBarLayout实现上滑隐藏ToolBar
- 动态规划之0-1 背包问题