📄 clienthttp.cpp
字号:
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 + -