/*** WinInet封装类,可用于windows上http请求, HttpClient.h* zhangyl 2016年07月15日 mail: balloonwj@qq.com*/#ifndef __HTTP_CLIENT_H__#define __HTTP_CLIENT_H__#include <WinInet.h>#include <string>#include <vector>#pragma comment(lib, "wininet.lib")#if defined(UNICODE) || defined(_UNICODE)typedef std::wstring tstring;#elsetypedef std::string tstring;#endif// IE8 on Windows 7#define IE8_USER_AGENT _T("Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1;Trident/4.0)")// HTTP请求方法enum HTTP_REQ_METHOD{REQ_METHOD_GET,REQ_METHOD_POST,};// HTTP状态事件标识enum HTTP_STATUS_EVENT{CONNECTED_EVENT,REQUEST_OPENED_EVENT,REQUEST_COMPLETE_EVENT,USER_CANCEL_EVENT};// WinInet Http异步封装类class CHttpClient{public:CHttpClient(void);~CHttpClient(void);public:BOOL OpenRequest(LPCTSTR lpszUrl, HTTP_REQ_METHOD nReqMethod = REQ_METHOD_GET); // 打开HTTP请求函数BOOL AddReqHeaders(LPCTSTR lpHeaders); // 添加一个或多个HTTP请求头函数BOOL SendRequest(const CHAR* lpData, DWORD dwLen); // 发送HTTP请求函数BOOL SendRequestEx(DWORD dwLen); // 开始发送HTTP请求函数BOOL SendReqBodyData(const CHAR* lpBuf, DWORD dwLen, DWORD& dwSendLen); // 发送HTTP请求消息体数据函数BOOL EndSendRequest(); // 结束发送HTTP请求函数DWORD GetRespCode(); // 获取HTTP响应码函数tstring GetRespHeader(); // 获取全部HTTP头tstring GetRespHeader(LPCTSTR lpszName, int nIndex = 0); // 获取HTTP头指定字段名称的值int GetRespHeaderByInt(LPCTSTR lpszName, int nIndex = 0); // 获取HTTP头指定字段名称的值(Int)BOOL GetRespBodyData(CHAR * lpBuf, DWORD dwLen, DWORD& dwRecvLen); // 获取HTTP响应消息体数据函数void CloseRequest(); // 关闭HTTP请求函数void SetConnectTimeOut(DWORD dwTimeOut); // 设置连接超时(单位:毫秒)void SetCancalEvent(); // 设置取消事件函数void SetProxy(LPCTSTR lpszServer, WORD nPort, LPCTSTR lpszUser = NULL, LPCTSTR lpszPwd = NULL);// 设置HTTP代理服务器private:// 状态回调函数static void __stdcall StatusCallback(HINTERNET hInternet, DWORD dwContext, DWORD dwInternetStatus, LPVOIDlpStatusInfo, DWORD dwStatusInfoLen);// 解析Url函数(协议,主机名,端口,文件路径)BOOL ParseURL(LPCTSTR lpszUrl, LPTSTR lpszScheme, DWORD dwSchemeLength, LPTSTR lpszHostName, DWORD dwHostNameLength, WORD& nPort, LPTSTR lpszUrlPath, DWORD dwUrlPathLength);// 等待事件函数BOOL WaitForEvent(HTTP_STATUS_EVENT nEvent, DWORD dwTimeOut);// 获取HTTP响应头长度DWORD __GetRespHeaderLen();// 获取HTTP响应头,按行保存在m_arrRespHeader数组BOOL __GetRespHeader();private:HINTERNET m_hInternet; // 会话句柄HINTERNET m_hConnect; // 连接句柄HINTERNET m_hRequest; // 请求句柄HANDLE m_hCompleteEvent; // 操作完成事件句柄HANDLE m_hCancelEvent; // 外部取消事件句柄DWORD m_dwConnectTimeOut; // 连接超时时间DWORD m_dwContext; // 当前操作上下文std::vector<tstring> m_arrRespHeader; // Http响应头数组tstring m_strProxy; // 代理服务器(主机名:端口)tstring m_strUser, m_strPwd; // 代理服务器的用户名和密码};#endif //!__HTTP_CLIENT_H__
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。