【RLIB】C++调用HttpRequest 、HttpResponse下载远程HTTP/HTTPS资源
来源:互联网 发布:海岛奇兵双弹升级数据 编辑:程序博客网 时间:2024/05/03 02:01
void DownloadFromInternet(const System::String &Url, const System::String &SavePath){//创建 HttpRequest 请求对象 ManagedObject<System::Net::HttpRequest> request =new System::Net::HttpRequest(Url);if (request.IsNull()) {//throw new System::Exception::GetLastException();return;}//初始化HttpRequestrequest->Method = _T("GET");request->Timeout = 8000;request->UserAgent = _T("RLib Downloader/4.5 http://rlib.cf/");request->Accept = _T("text/xml,application/xml,application/xhtml+xml,text/html;*/*");request->Headers.Add("Accept-Charset", "iso-8859-1,utf-8;q=0.7,*;q=0.7");request->Headers.Add("Accept-Language", "zh-cn, zh;q=1.0,en;q=0.5,en;q=0.5,en;q=0.5");request->Headers.Add("Accept-Encoding", "gzip, deflate, x-gzip, identity; q=0.9");//获取远程服务器响应对象 System::Net::HttpResponse *response = request->GetResponse();//自动回收响应对象AutoRunOnce responseFinalizer([](void *response){reinterpret_cast<System::Net::HttpResponse>(response)->Close();}, response);//判断是否出现异常, 出于性能考虑, RLib框架本身并不使用SEH和C++异常处理, 需要自行抛出异常if (!response){RLIB_ALERT(request->GetLastException()->Message);//throw request->GetLastException();return;}if (response->GetLastException()->Id != STATUS_SUCCESS){//通常情况下是网页数据异常RLIB_ALERT(response->GetLastException()->Message);//throw new System::Net::HttpException(*response->GetLastException());return;}//成功 ManagedObject<System::IO::FileStream> output =System::IO::File::Create(SavePath, System::IO::File::CreateNewMode);if (output.IsSatisfied()){//response->GetResponseStream()->CopyTo(output);output->Write(response->GetResponseStream()->ObjectData, response->GetResponseStream()->Length);//文件IO异常if (output->GetLastException()->Id != STATUS_SUCCESS){RLIB_ALERT(output->GetLastException()->Message);//throw new System::IO::FileException(*response->GetLastException());return;}}}
调用例子:
DownloadFromInternet(_T("http://rlib.cf/images/logo.png"), _T("logo.png"));
或者, 更简单的, 使用封装好的方法:
System::Net::WebClient::DownloadFile(const String &Url, const String &FilePath, HttpRequest *pRequest IN = nullptr, HttpResponse **ppResponse OUT = nullptr);
- 【RLIB】C++调用HttpRequest 、HttpResponse下载远程HTTP/HTTPS资源
- HttpRequest,HttpResponse,HTTP GET 和 HTTP POST
- 【经验总结】Http,网页访问,HttpRequest,HttpResponse相关的知识
- HttpClient,HttpRequest,HttpResponse
- Servlet HttpRequest和HttpResponse
- HttpRequest和HttpResponse对象
- javaweb之HttpRequest与HttpResponse
- 服务器的两个对象:HttpResponse和HttpRequest
- WebService 中操作 HttpRequest / HttpResponse (一)
- WebService 中操作 HttpRequest / HttpResponse (二)
- Django的HttpRequest和HttpResponse对象
- Django——HttpRequest和HttpResponse
- httprequest跳转和httpresponse跳转的区别
- HttpContext, HttpRequest, HttpResponse 常用对象摘要
- http https 下载
- jsp远程调用资源图片,以附件形式下载
- http/https接口调用
- C#Http文件下载(支持断点续传) 提供资源下载
- 动态库输出函数的约定以及名字修饰约定
- 常用数据结构之顺序结构List实现
- Hibernate3.5.3 之 一对一映射关联
- /sysroot/usr/include/search.h:19: error: expected declaration specifiers or '...' before '__free_fn_
- android 从Assets中读取中文文本
- 【RLIB】C++调用HttpRequest 、HttpResponse下载远程HTTP/HTTPS资源
- [算法导论读书笔记]矩阵链乘法
- Helloword
- 学破解 <三> PE格式之 区块表与区块
- hdu1203(01背包)
- <a href="#">与<a href="javascript:void(0)">
- 利用SecureCRT在linux与Windows之间传输文件
- RTS和CTS流控介绍
- hdu2452---记忆化搜索