⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clienthttp.cpp

📁 支持CMWAP 的HTTP socket封装类。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
		pstr="Range: bytes=";
		memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)pstr,strlen(pstr));
		iIndex +=strlen(pstr);		
		_ltoa(lFrom,szTemp,10);
		memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)szTemp,strlen(szTemp));
		iIndex +=strlen(szTemp);		
		memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"-",strlen("-"));
		iIndex +=strlen("-");

		if(lTo > lFrom)
		{
			_ltoa(lTo,szTemp,10);
			memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)szTemp,strlen(szTemp));
			iIndex +=strlen(szTemp);		
		}
		memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"\r\n",strlen("\r\n"));
		iIndex +=strlen("\r\n");
    }

    ///返回结果
    lLength= iIndex ;
    return m_RequestHeaderBuf;

}


LPCSTR  CClientHTTP::FormatPOSTHeader_HTTPPROXY(LPSTR lpszServer, LPSTR lpszObject, long lPostDataLength, long &lLength)
{
	char szTemp[80];
    char* pstr;
	
    memset(m_RequestHeaderBuf,0,HTTPHEADER_MAX_SIZE); 
	
    ///第1行:方法,请求的路径,版本
    int iIndex = 0 ;
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"POST ",5);
    iIndex +=5;
	

	memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"HTTP://",7);
	iIndex += 7;
	memcpy(m_RequestHeaderBuf+iIndex,m_sProxyInfo.m_acServer,strlen(m_sProxyInfo.m_acServer));
	iIndex += strlen(m_sProxyInfo.m_acServer);	
	sprintf(szTemp,":%d",m_sProxyInfo.m_nServerPort);
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)szTemp,strlen(szTemp));
    iIndex +=strlen(szTemp);



    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)lpszObject,strlen(lpszObject));
    iIndex +=strlen(lpszObject);
	
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)" HTTP/1.1\r\n",strlen(" HTTP/1.1\r\n"));
    iIndex +=strlen(" HTTP/1.1\r\n");
	
	
	
    ///第2行:主机
	pstr = "Host: ";
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)pstr,strlen(pstr));
    iIndex +=strlen(pstr);
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)lpszServer,strlen(lpszServer));
    iIndex += strlen(lpszServer);

	sprintf(szTemp,":%d",m_sProxyInfo.m_nServerPort);
    memcpy(m_RequestHeaderBuf+iIndex, (BYTE*)szTemp, strlen(szTemp));
    iIndex += strlen(szTemp);

    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"\r\n",strlen("\r\n"));
    iIndex +=strlen("\r\n");


	///第4行:接收的数据类型
	pstr = "Accept: */*\r\n";
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)pstr,strlen(pstr));
    iIndex += strlen(pstr);


    ///第5行:浏览器类型
    pstr = "User-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n";
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)pstr,strlen(pstr));
    iIndex += strlen(pstr);



    ///第6行:连接设置,保持
    pstr = "Connection: Keep-Alive\r\n";
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)pstr,strlen(pstr));
    iIndex += strlen(pstr);


	
	pstr = "Content-Type: application/vnd.wap.mms-message\r\n";
	memcpy(m_RequestHeaderBuf+iIndex, (BYTE*)pstr, strlen(pstr));
    iIndex +=strlen(pstr);

	pstr = "Content-Length: ";
	memcpy(m_RequestHeaderBuf+iIndex, (BYTE*)pstr, strlen(pstr));
    iIndex +=strlen(pstr);

	
	sprintf(szTemp,"%d",lPostDataLength);
	memcpy(m_RequestHeaderBuf + iIndex, szTemp, strlen(szTemp));
	iIndex += strlen(szTemp);

    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"\r\n\r\n",strlen("\r\n\r\n"));
    iIndex +=strlen("\r\n\r\n");
	
    ///返回结果
    lLength= iIndex ;
    return m_RequestHeaderBuf;
}

///根据请求的相对URL输出HTTP请求头
LPCSTR  CClientHTTP::FormatPOSTHeader(LPSTR lpszServer, LPSTR lpszObject, long lPostDataLength, long &lLength)
{
    char* pstr;
	
    memset(m_RequestHeaderBuf,0,HTTPHEADER_MAX_SIZE); 
	
    ///第1行:方法,请求的路径,版本
    int iIndex = 0 ;
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"POST ",5);
    iIndex +=5;


    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)lpszObject,strlen(lpszObject));
    iIndex +=strlen(lpszObject);
	
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)" HTTP/1.1",strlen(" HTTP/1.1"));
    iIndex +=strlen(" HTTP/1.1");	
	
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"\r\n",strlen("\r\n"));
    iIndex +=strlen("\r\n");	
	
	
    ///第2行:主机
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"Host:",5);
    iIndex +=5;
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)lpszServer,strlen(lpszServer));
    iIndex +=strlen(lpszServer);
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"\r\n",strlen("\r\n"));
    iIndex +=strlen("\r\n");
	
    ///第5行:浏览器类型
    pstr="User-Agent:Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)";
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)pstr,strlen(pstr));
    iIndex +=strlen(pstr);
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"\r\n",strlen("\r\n"));
    iIndex +=strlen("\r\n");
	
	
	pstr = "Content-Type:   application/x-www-form-urlencoded";
	memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)pstr,strlen(pstr));
    iIndex +=strlen(pstr);
    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"\r\n",strlen("\r\n"));
    iIndex +=strlen("\r\n");
	

	
	pstr = "Content-Length: ";
	memcpy(m_RequestHeaderBuf+iIndex, (BYTE*)pstr, strlen(pstr));
    iIndex +=strlen(pstr);
	

	char strLength[80];
	sprintf(strLength,"%d",lPostDataLength);
	memcpy(m_RequestHeaderBuf+iIndex,strLength,strlen(strLength));
	iIndex +=strlen(strLength);

    memcpy(m_RequestHeaderBuf+iIndex,(BYTE*)"\r\n\r\n",strlen("\r\n\r\n"));
    iIndex +=strlen("\r\n\r\n");
	
    ///返回结果
    lLength= iIndex ;
    return m_RequestHeaderBuf;
	
}


//获取HTTP请求的返回头
int	CClientHTTP::ReceiveResponseHeader(HANDLE hCancelEvent)
{
    char cbuffer;	
    int l,chars;	
    BOOL done;

    int iRes;

    chars   =   0;   
    done   =   FALSE; 
    int iIndex = 0;
    int iRecvedSize = 0 ;
    memset(m_ResponeHeaderBuf,0,HTTPHEADER_MAX_SIZE); 



    try
    {
		while(!done)   
		{
			iRes = WaitForSocket(WAIT_RECV,30,hCancelEvent);
			if( iRes != S_SOCKET_OK )
				return iRes;

			l   = recv(&cbuffer,1);

			if (l == SOCKET_ERROR) 
			{
				return E_SOCKET_FAIL ;
			}
			else if (l == 0)
			{
				break;
			}
			else if(l<0)   
				break ;

			switch(cbuffer)   
			{   
			case   '\r':   
				break;   
			case   '\n':   
				if(chars==0)   
				done   =   TRUE;   
				chars=0;   
				break;   
			default:   
				chars++;   
				break;   
			}
			if(iIndex>=(HTTPHEADER_MAX_SIZE-1))
				return E_SOCKET_FAIL ;
			m_ResponeHeaderBuf[iIndex] = cbuffer;	
				iIndex ++ ;
		}
    }
    catch(...)
    {
		return E_SOCKET_FAIL;
    }
    return   S_SOCKET_OK;   
}
//获取HTTP状态
int CClientHTTP::GetResponseStatus(DWORD &dwStatusCode)
{
    LPSTR pszStr = m_ResponeHeaderBuf;
    LPSTR ptr;
    char acStatusCode[32];
    memset(acStatusCode,0,32);

    ptr = strchr(pszStr,' ');
    if( ptr == NULL )
	return -1;
    pszStr = ptr + 1 ;

    ptr = strchr(pszStr,' ');
    if( ptr == NULL )
	return -1;
    memcpy(acStatusCode,pszStr,ptr-pszStr);		


    dwStatusCode = (DWORD)atoi(acStatusCode);
    return 0;
}


BYTE*	CClientHTTP::GetResponseHeader()
{
    return (BYTE*)m_ResponeHeaderBuf;
}
int CClientHTTP::GetField(LPCSTR lpcSession, LPSTR lpValue,LPSTR lpHeader)
{
    //取得某个域值
    LPSTR lpBuf = m_ResponeHeaderBuf ;
    LPSTR lpStr = new char[strlen(lpcSession)+1] ;
    if( lpStr==NULL)
	return 0;
    strcpy(lpStr,lpcSession);	

    if(lpHeader != NULL)
    {
	lpBuf = lpHeader ;
	_strupr(lpHeader);
	_strupr(lpStr);
    }
    LPSTR   ptr,ptr2;
    ptr = strstr((char*)lpBuf,lpStr);
    if( ptr != NULL)
    {
	ptr += strlen(lpStr);
	ptr += 2;
	ptr2 = strstr(ptr,"\r\n");
	if( ptr2 != NULL )
	{
	    strncpy(lpValue,ptr,ptr2-ptr);
	    lpValue[ptr2-ptr] = 0;
	    return ptr2-ptr;
	}
    }
    return 0;
}


DWORD CClientHTTP::GetMSizeFromW(LPWSTR lpwszStr)
{
    return WideCharToMultiByte(CP_OEMCP,NULL,lpwszStr,-1,NULL,0,NULL,FALSE);
}
DWORD CClientHTTP::GetWSizeFromM(LPCSTR lpcszStr)
{
    return MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0);
}

BOOL CClientHTTP::MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize)
{
    // Get the required size of the buffer that receives the Unicode 
    // string. 
    DWORD dwMinSize;
    dwMinSize = MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, NULL, 0);

    if(dwSize < dwMinSize)
    {
	return FALSE;
    }


    // Convert headers from ASCII to Unicode.
    MultiByteToWideChar (CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize);  
    return TRUE;
}
BOOL CClientHTTP::WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize)
{
    DWORD dwMinSize;
    dwMinSize = WideCharToMultiByte(CP_ACP,NULL,lpcwszStr,-1,NULL,0,NULL,FALSE);
    if(dwSize < dwMinSize)
    {
	return FALSE;
    }
    WideCharToMultiByte(CP_ACP,NULL,lpcwszStr,-1,lpszStr,dwSize,NULL,FALSE);
    return TRUE;
}

⌨️ 快捷键说明

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