clienthttp.h

来自「wince 下socket实现的HTTP类」· C头文件 代码 · 共 96 行

H
96
字号
/*******************************************************************************
* (C) Copyright 2008 Giant Electronics LTD 
* 
* These computer program listings and specifications are the property of Giant 
* Electronics LTD and shall not be reproduced or copied or used in whole or in 
* part without written permission from Giant Electronics LTD .
*
* Project:      IViewer 
* File Name:	ClientHTTP.h
* Programer(s):	Ben Zhan
* Created:      20080729 
* Description:	interface of encapsulating HTTP protocol
* This class encapsulates HTTP protocol and provides the functionality to request 
  and read files on an HTTP server.
*******************************************************************************/

  /*     
  CClientHTTP: 继承自CClientSocket的HTTP操作类
  应用举例:

	//初始化套接字
	CClientSocket::SocketInit();
	//生成HTTP 实例
  	CClientHTTP http;	

	http.SendRequest(false,"www.sina.com.cn",0,0,0);
	int nHeadLength,nBodyLength;

	//取返回的信息头
	BYTE* pHead = http.GetResponseHeader(nHeadLength);
	//取返回的HTML内容
	BYTE* pBody = http.GetResponseBody(nBodyLength);
  */   


#if !defined(AFX_CLIENTHTTP_H__BDF77B47_0251_4613_BE79_7DADC95775B4__INCLUDED_)
#define AFX_CLIENTHTTP_H__BDF77B47_0251_4613_BE79_7DADC95775B4__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "ClientSocket.h"

#define E_HTTP_CONNECT_FAILED			 0x15
#define E_HTTP_REQUEST_FAILED			 0x16
#define E_HTTP_RECEIVEHEADER_FAILED		 0x17
#define E_HTTP_RECEIVEBODY_FAILED		 0x18
#define E_HTTP_SUCCEED					 0x19
#define E_HTTP_OTHERERROR				 0x20
#define HTTPHEADER_MAX_SIZE				 2048

class CClientHTTP : public CClientSocket  
{
public:
	CClientHTTP();
	virtual ~CClientHTTP();	

	//发送请求	
	int		SendURLRequest(LPCSTR lpszURL,HANDLE hCancelEvent=NULL);
	//接收信息头
	int		ReceiveResponseHeader(HANDLE hCancelEvent=NULL);

	//取HTTP返回状态码 400-500表示出错
	int		GetResponseStatus(DWORD &dwStatusCode);//获取HTTP状态

	int		GetField(LPCSTR lpszSession, LPSTR lpszValue,LPSTR lpszHeader=NULL);	//返回某个域值,-1表示不成功

	int     SendRequest(bool   bIsPost,   LPCSTR   lpszUrl,   LPSTR lpszPostMsg,  int iPostLength, HANDLE hCancelEvent) ;

	BYTE*	GetResponseHeader();		//取得返回的信息头

private:
	BOOL	ValidHostChar(TCHAR   ch) ; 
	void	ParseURL(LPCSTR   lpszURL,LPSTR   lpszProtocol,int   lprotocol,LPSTR   lpHost,int   iHost,LPSTR   lpRequest,int   iRequest,int  * piPort);
	int		SendHTTP(LPCSTR   lpszURL,LPCSTR  lpszHeaderReceive,BYTE * post,DWORD   dwPostLength,HANDLE hCancelEvent);
	LPCSTR	FormatRequestHeader(LPSTR lpszServer,LPSTR lpszObject,long &lLength,
						LPSTR lpszCookie=NULL,LPSTR lpszReferer=NULL,
						long lFrom=0,long lTo=0,
						int nServerType=0);									//格式化请求头

	// added by Ben 2009-03-17
	LPCSTR  FormatPostRequestHeader(LPSTR lpszServer,LPSTR lpszObject,long lPostDataLength,long &lLength);

public:
	DWORD	GetMSizeFromW(LPWSTR lpwszStr);
	DWORD	GetWSizeFromM(LPCSTR lpcszStr);
	BOOL	MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize);
	BOOL	WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize);
private:
	CHAR		m_ResponeHeaderBuf[HTTPHEADER_MAX_SIZE];
	CHAR		m_RequestHeaderBuf[HTTPHEADER_MAX_SIZE];
};

#endif // !defined(AFX_CLIENTHTTP_H__BDF77B47_0251_4613_BE79_7DADC95775B4__INCLUDED_)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?