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 tar包安装 包含openssl,rewrite,stream,sticky 等模块
最近需要使用nginx 但是发现有时缺少一些模块. 所以 在学习如何增加上相应的模块. 主要学习的网站: 沧海书生 Ansible爱好者 https://www.cnblogs.com/tssc/p/ ...
- 定时任务-SQL Server代理 作业
创建一个sqlserver作业 sqlserver的作业的功能更加偏向于数据库,处理数据,迁移等.当然也可以调用接口(存储过程调用接口 https://www.cnblogs.com/cynchan ...
- Linux基础-04-权限
1. 查看文件的权限 1) 使用ls –l命令查看文件上所设定的权限. -rw-r--r-- 1 root root 605 Mar 18 20:28 .jp1.tar.gz 权限信息 属主 属组 文 ...
- PAT(B) 1043 输出PATest(Java)统计
题目链接:1043 输出PATest (20 point(s)) 题目描述 给定一个长度不超过 104 的.仅由英文字母构成的字符串.请将字符重新调整顺序,按 PATestPATest- 这样的 ...
- 利用strace & Perf分析MySQL
strace介绍及用途 strace是一个用于诊断,分析linux用户态进程的工具 类似的工具pstrace,lsof,gdb,pstrack strace观察mysqld对my.cnf 配置文件的加 ...
- Hibernate配置流程
操作数据库必须要设置数据库的连接属性: driver_class,url,username,password(hibernate.cfg.xml) 2. 编写对象跟表之间的映射关系(类名.hb ...
- 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)
原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- 2019年全国高校sql数据库
2019年全国高校名单sql数据库信息: 根据教育部发布的文件整理形成可用.sql文件,导入数据库即可使用. 包括全国高等学校共计2956所,其中:普通高等学校2688所(含独立学院257所),成人高 ...
- windows环境下如何搭建Consul+Ocelot
下面的是markdown格式的文档,懒得排版了,有兴趣的话可以去github上看,有源码 Github:https://github.com/yuchengao0721/Consul-Ocelot.g ...
- 开源项目hutool之zip_slip漏洞
今天突然看到了去年写的一篇漏洞分析文章,搬到博客上 ---------------- Hutool是Github上的一个开源项目,是一个java的工具包,对文件.流.加密解密.转码.正则.线程.XML ...