Windows API 下载http文件

57 篇文章 16 订阅

打开http链接下载文档流程。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <wininet.h>
#include <string>

//加入连接库
#pragma comment(lib, "wininet.lib")


char * UnicodeToANSI(const wchar_t* str)
{
	char* result;
	int textlen;
	textlen = WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
	result = (char *)malloc((textlen + 1)*sizeof(char));
	memset(result, 0, sizeof(char) * (textlen + 1));
	WideCharToMultiByte(CP_ACP, 0, str, -1, result, textlen, NULL, NULL);
	return result;
}

int main(int argc, char* argv[])
{
	printf("Hello World! ");
	BYTE buf[1024];
	TCHAR path[MAX_PATH];
	DWORD num;


	//打开
	HINTERNET  hinet = InternetOpen(_TEXT("Microsoft Internet Explorer"), INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_INVALID_PORT_NUMBER);

	GetTempPath(MAX_PATH, path);
	_tcscat(path, TEXT("/t.zip"));

	//获取文件句柄
	HINTERNET hurl = InternetOpenUrl(hinet, _TEXT("http://file2.mydrivers.com/display/nvidia_forceware7645.zip"), NULL, 0, INTERNET_FLAG_NEED_FILE, NULL);

	std::string spath;
#ifdef UNICODE
	char * allocpath = UnicodeToANSI(path);
	spath = allocpath;
	free(allocpath);

#else
	spath = path;
#endif
	FILE* i = fopen(spath.c_str(), "wb");
	//从internet下载文件内容
	while (TRUE == InternetReadFile(hurl, buf, 1024, &num) && num > 0)
	{
		fwrite(buf, 1, num, i);
	}
	fclose(i);

	//使用完毕文件句柄和关闭连接
	InternetCloseHandle(hurl);

	InternetCloseHandle(hinet);


	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值