Http服务器下载文件

需要包含的头文件和库文件

#include <string>

#include <Wininet.h>

#include <fstream>

#pragma comment(lib,"Wininet.lib")

1.打开服务器

int CHTTP::CreateConnect(const string & HTTPServer,const string & UserName,const string &Password,const int nPort)

{

DWORD err;

m_Session = NULL;

m_Connect = NULL;

HINTERNET m_Session = InternetOpen(L"AGENT",INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);

if(m_Session != NULL)

{

if (HTTPServer.find("www")!=string::npos)

{

m_Connect = InternetConnectA(m_Session, HTTPServer.c_str(),nPort,UserName.c_str(),Password.c_str(), INTERNET_SERVICE_HTTP,0,0);

}

else

{

m_Connect = InternetConnectA(m_Session, HTTPServer.c_str(),INTERNET_DEFAULT_HTTP_PORT,UserName.c_str(),Password.c_str(), INTERNET_SERVICE_HTTP,0,0);

}

}

if(m_Connect == NULL)

{

err = GetLastError();

return OP_FAIL;

}

return OP_SUCCESS;

}

2.下载文件

int CHTTP::DownloadFile(const wstring & RemoteFileName,const wstring & LocalPath,const wstring & LocalFileName)

{

if(m_Connect == NULL)

{

return OP_FAIL;

}

HINTERNET m_WebSite = HttpOpenRequest(m_Connect,L"GET",RemoteFileName.c_str(),HTTP_VERSION,NULL,0,INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_RELOAD,0);

if(m_WebSite == NULL)

{

DWORD err = GetLastError();

return OP_FAIL;

}

BOOL   bSendRequest=::HttpSendRequest(m_WebSite,NULL,0,0,0);

wchar_t   achQueryBuf[1024];

DWORD   dwQueryBufLen = sizeof(achQueryBuf);

BOOL   bQuery=::HttpQueryInfo(m_WebSite,HTTP_QUERY_STATUS_CODE,achQueryBuf,&dwQueryBufLen,NULL);

wstring str = achQueryBuf;

if (m_pInitStruct != NULL)

{

wchar_t   QueryBuf[1024];

DWORD     QueryBufLen = sizeof(QueryBuf);

BOOL   bLQuery=::HttpQueryInfo(m_WebSite,HTTP_QUERY_CONTENT_LENGTH,QueryBuf,&QueryBufLen,NULL);

wstring Buff = QueryBuf;

int length = _wtoi(Buff.c_str());

}

if(!bQuery)

{

return OP_FAIL;

}

if(str == L"200" || str == L"302")

{

//临时文件名

wstring TempFile = LocalPath+L\\package.tmp;

DeleteFile(TempFile.c_str());

FILE     *fp_File = NULL;

DWORD err = _wfopen_s(&fp_File,TempFile.c_str(), L"wb");

DWORD Number = 1;

DWORD MAXBLOCKSIZE = 512;

char Temp[512];

while(Number)

{

memset(Temp,0,512);

if (!InternetReadFile(m_WebSite,Temp,MAXBLOCKSIZE-1,&Number))

{

fclose(fp_File);

return OP_FAIL;

}

fwrite(Temp, sizeof(char), Number, fp_File);

}

fclose(fp_File);

//重命名为目标文件

wstring DesFile =  LocalPath;

DeleteFile(DesFile.c_str());

::MoveFile(TempFile.c_str(),DesFile.c_str());

return OP_SUCCESS;

}

else

{

return OP_FAIL;

}

}

3.关闭服务器

int CHTTP::Close()

{

if(m_WebSite != NULL)

{

InternetCloseHandle(m_WebSite);

}

if(m_Connect != NULL)

{

InternetCloseHandle(m_Connect);

}

if(m_Session != NULL)

{

InternetCloseHandle(m_Session);

}

return OP_SUCCESS;

}

时间: 2024-11-05 16:40:38

Http服务器下载文件的相关文章

wp8通过WebClient从服务器下载文件

通过WebClient从Web服务器下载文件,并保存到wp8手机应用程序的独立存储. 我们可以通过利用webClient_DownloadStringCompleted来获得下载完成所需要的时间,用Stopwatch得到下载的总时间. 通常我们都将上传.下载作为异步事件来处理,以便不阻止主线程. String url = "http://172.18.144.248:8080/upload/" + filename; WebClient client = new WebClient()

本地上传文件到服务器,从服务器下载文件到本地

最近在做项目的时候涉及到了文件的上传.下载,以前学习IO时也没有搞得多清楚,在网上找了些上传下载的例子,然后修改了部分.经测试,上传下载文件暂时能用,下面是上传和下载的方法: 1.本地上传文件到服务器 html代码: <form id="uploadDatumInfo" name="uploadDatumInfo" method="post" enctype="multipart/form-data" target=&q

C# 实现访问FTP服务器下载文件,获取文件夹信息小记

最近因为要开发广告制作工具,自动生成广告流,需要获取第三方服务器上的文件资源,经过摸索,从这次经历中记录下. FtpWebRequest reqFtp; WebResponse response = null; //获取文件夹信息 reqFtp = (FtpWebRequest)WebRequest.Create(this.ftp);//ftp://IP:port/文件夹名1/文件夹名2/.../文件夹名 reqFtp.UseBinary = true; reqFtp.KeepAlive = f

putty windows上传文件到linux服务器 &amp; 从linux服务器 下载文件到 windows

从putty官网下载putty软件:putty.exepscp.exepsftp.exe等软件 也可以自己下windows安装包putty-0.63-installer.exe 本人直接下载putty-0.63-installer.exe安装包了,然后直接安装 使用pscp方式从windows上传文件到linux服务器 在CMD命令行中进入到putty安装目录 输入pscp 回车 pscp 跟我们平时使用的linux scp命令操作的都是类似的 现在我直接从windows本地上传一个文件到lin

服务器下载文件http

#region 从服务器下载文件 /// <summary> /// 从服务器下载文件 /// </summary> /// <param name="_Request"></param> /// <param name="_Response"></param> /// <param name="_fileName">文件名称</param> ///

scp从服务器下载文件或上传文件到服务器

1.从服务器下载文件: scp [email protected]:/xxx/xxx.xxx e:/test/ 2.从本地上传文件到服务器 scp e:/test/test.log [email protected]:/text 理解: scp 操作的文件地址    要上传的文件地址 从服务器下载文件就好比从服务器上传文件到本地服务器 原文地址:https://www.cnblogs.com/itwlp/p/10859476.html

从Linux服务器下载文件夹到本地

从Linux服务器下载文件夹到本地1.使用scp命令 scp /home/work/source.txt [email protected]:/home/work/   #把本地的source.txt文件拷贝到192.168.0.10机器上的/home/work目录下 scp [email protected]:/home/work/source.txt /home/work/   #把192.168.0.10机器上的source.txt文件拷贝到本地的/home/work目录下 scp [em

Java Web实现使用浏览器从服务器下载文件(后台)

Java Web实现 使用浏览器从服务器下载文件. 下面实现两种情况的下载,需求如下: 需求(一):1.用户在页面填写表单. 2.填写完成后,选择下载,将表单内容发往后台. 3.后台根据内容生产一个文件,发送给前端. 4.前端成功下载文件到本地. 此需求简单来说就是,用户在页面上填写内容,然后将内容转变成文件的形式. 后台设计思路:1.首先拿到前端发送过来的内容. 2.将内容解析,存放至缓冲区. 3.设置响应头. 4.将缓冲区里的内容,以流的方式写出. 代码实现: public void dow

通过pscp从linux服务器下载文件到本地windows操作系统记载

从linux 服务器下载数据到本地windows操作系统 1) 下载 putty.exe 完整安装包. 2) 将pscp.exe程序 放在C:/windows/system32文件下(或者配置pscp.e xe的系统变量). 3)   打开windows cmd.exe命令行窗口 输入pscp命令看是否能够运行. 4)   在命令行运行pscp [email protected]:/usr/tideway/java/integrations/mappings/extended-rdb/Oracl

C#实现开发windows服务实现自动从FTP服务器下载文件(自行设置分/时执行)

最近在做一个每天定点从FTP自动下载节目.xml并更新到数据库的功能.首先想到用 FileSystemWatcher来监控下载到某个目录中的文件是否发生改变,如果改变就执行相应的操作,然后用timer来设置隔多长时间来下载.后来又想想了.用windwos服务来实现吧. 效果图: 执行的Log日志: INFO-2016/5/24 0:30:07--日志内容为:0/30/7进行time触发 INFO-2016/5/24 1:30:07--日志内容为:1/30/7进行time触发 INFO-2016/