HttpReader
头文件:
#pragma once #include <afxinet.h> class CSF_HttpDataReader
{
public:
CSF_HttpDataReader(void);
~CSF_HttpDataReader(void); public:
int GetHttpData(CString strUrl,char* buf,int bufSize, int tc = );
};
源文件:
#include "StdAfx.h"
#include "SF_HttpDataReader.h" CSF_HttpDataReader::CSF_HttpDataReader(void)
{
} CSF_HttpDataReader::~CSF_HttpDataReader(void)
{
} typedef struct tagASYNC_HTTP_CONTEXT
{
HANDLE hEvent;
CString strUrl;
char* buf;
int bufSize; int nRead;
}ASYNC_HTTP_CONTEXT; UINT ThreadProc_HttpRead(LPVOID lpParam)
{
ASYNC_HTTP_CONTEXT* pCon = (ASYNC_HTTP_CONTEXT*)lpParam; int nLen;
int nRead = ; CInternetSession ss(L"HttpClient",,INTERNET_OPEN_TYPE_DIRECT,NULL,NULL,INTERNET_FLAG_DONT_CACHE);
CHttpFile* pFile = NULL;
try
{
pFile = (CHttpFile*)ss.OpenURL(pCon->strUrl, ,
INTERNET_FLAG_TRANSFER_ASCII|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_KEEP_CONNECTION|INTERNET_FLAG_NO_COOKIES);
//pFile = (CHttpFile*)ss.OpenURL(pCon->strUrl);
//pFile = (CHttpFile*)ss.OpenURL(pCon->strUrl, 1, INTERNET_FLAG_TRANSFER_BINARY|INTERNET_FLAG_DONT_CACHE); if (pFile != NULL)
{
DWORD dwStatus;
//DWORD dwStatusSize = sizeof(DWORD);
//BOOL bOk = pFile->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER)
pFile->QueryInfoStatusCode(dwStatus);
if (HTTP_STATUS_OK == dwStatus)
{
while ((nLen = pFile->Read(pCon->buf,)) > )
{
pCon->buf += nLen;
nRead += nLen;
if (nRead >= pCon->bufSize)
{
//Maybe the buffer is too small
break;
}
}
}
ss.Close();
pFile->Close();
delete pFile;
}
}
catch (...)
{
pCon->nRead = ;
} pCon->nRead = nRead;
SetEvent(pCon->hEvent); return ;
} int CSF_HttpDataReader::GetHttpData(CString strUrl,char* buf,int bufSize, int tc /* = 0 */)
{
ASYNC_HTTP_CONTEXT con;
con.strUrl = strUrl;
con.buf = buf;
con.bufSize = bufSize;
con.nRead = ;
con.hEvent = CreateEvent(NULL, FALSE, FALSE, L""); if (tc == )
{
ThreadProc_HttpRead(&con);
}
else
{
CWinThread* thd = AfxBeginThread(ThreadProc_HttpRead, &con);
DWORD dwWait = WaitForSingleObject(con.hEvent, tc*);
if (dwWait == WAIT_TIMEOUT)
{
TerminateThread(thd->m_hThread, );
}
} CloseHandle(con.hEvent); return con.nRead;
}
Timeout方法比较凶狠,容易导致泄露。
HttpReader的更多相关文章
- 异构数据源海量数据交换工具-Taobao DataX 下载和使用
DataX介绍 DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesystem)之间的数据交换. 目前成熟的数据导入 ...
- 淘宝异构数据源数据交换工具 DataX
淘宝异构数据源数据交换工具 DataX 阅读目录 DataX是什么? DataX用来解决什么? DataX特点? DataX结构模式(框架+插件) DataX在淘宝的运用 DataX是什么? Data ...
- 大数据 --> 淘宝异构数据源数据交换工具 DataX
淘宝异构数据源数据交换工具 DataX DataX是什么? DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesys ...
- Datax3.0使用说明
一.datax3.0介绍 1.DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).HDFS.Hive.ODPS.HBase.FTP等各种异构数据源之间稳 ...
- 使用Java Socket手撸一个http服务器
原文连接:使用Java Socket手撸一个http服务器 作为一个java后端,提供http服务可以说是基本技能之一了,但是你真的了解http协议么?你知道知道如何手撸一个http服务器么?tomc ...
- 爪哇国新游记之二十九----访问URL获取输入流
代码: import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import ...
- ETL工具--DataX3.0实战
DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesystem)之间的数据交换,由淘宝数据平台部门完成. DataX ...
- 淘宝上的大智慧L2数据,月卡最便宜是8元钱,这个也可以获取BBD、DDX等数据!
Want:从顶牛股网上下载DDX数据. 1.下载历史DDE数据:获取最近120个交易日的DDE数据 #define SFURL_DNG_SINGLEL"http://www.dingniug ...
- datax二次开发
从hive抽取数据,写入hbase 一.datax插件hbase12xwriter开发 查看datax源码,发现有hbase094xwriter和hbase11xwriter源码,说明datax支持h ...
随机推荐
- Nginx负载均衡总结2
如果要支持健康检查需要开启health_check(好吧,这个是nginx plus版本才有的功能,plus是付费版) 还有一点,Windows的nginx不支持udp等协议,所以有一些测试还必须用l ...
- AJAX个人草稿
/*var CUSTOMS_SEX=arr[2]; var CUSTOMS_TELEPHONE=arr[6]; mui.openWindow({ url:'userinfol.html', id:'u ...
- skywalking 比较有意思的地方
获取agent jar包路径的方法: findPath(); private static File findPath() throws AgentPackageNotFoundException { ...
- AS3.0 位图(BMP)解析类
/** * *-----------------------------* * | *** BMP格式解析类 *** | * *-----------------------------* * * 编 ...
- 使用winsw将springboot打包的jar注册系统本地服务
1.下载winsw 下载地址:https://github.com/kohsuke/winsw/releases 我这里下载的是2.3.0版. 下载sample-minimal.xml和WinSW.N ...
- VS.NET(C#)--2.3良构的XHTML
良构的XHTML 1.关闭所有标签 2.禁止标签嵌套 3.区分大小写 4.引号 所有属性值都要置于引号中 5.唯一的根元素<html></html> 6.保留字符 XML中五 ...
- 爬虫相关--requests库
requests的理想:HTTP for Humans 一.八个方法 相比较urllib模块,requests模块要简单很多,但是需要单独安装: 在windows系统下只需要在命令行输入命令 pip ...
- CSS3浏览器私有属性
CSS3的浏览器私有属性前缀是一个浏览器生产商经常使用的一种方式.它暗示该CSS属性或规则尚未成为W3C标准的一部分.因此每种内核的浏览器都只能识别带有自身私有前缀的CSS3属性.我们在书写CSS3代 ...
- 使用httpwebrequest发送http请求
HttpWebRequest request = WebRequest.Create("url") as HttpWebRequest; request.Timeout = * * ...
- iOS 如何判断一个点在某个指定区域中
在iOS 开发中会遇到 判断位置的情况 iOS 自己都有函数实现的这些功能. 判断一个点是否在这个rect区域中 bool CGRectContainsPoint(CGRect rect,CGPoin ...