Head方法要求响应与GET请求一样,但是没有响应体(response body)。如果我们只对关于网页或资源的信息感兴趣,而不想检索资源本身的全部内容,可以使用HEAD命令。HEAD的使用方法与GET相同,只是不返回Web页的正文内容。当一个Web页的内容被更新时,可以使用Head方法查询,以作出有关是否根据其大小下载网页的决定。
Head命令格式如下,其具体参数请参考GET方法.
HEAD / HTTP/1.1
以下为一次典型的Head命令:
HEAD /index.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*
Referer: http://www.wantsoft.com
Accept-Language: zh-cn,en-us;q=0.5
Content-Type: application/x-www-form-urlencoded
Cookie: ASPSESSIONIDSCRTQDCC=FBKBLOLBJNPDNKKLNCAAEJIO
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: www.wantsoft.com
Pragma: no-cache
Content-Length: 0
Cache-Control: no-cache
响应消息如下:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Tue, 25 Nov 2008 05:53:35 GMT
Content-Length: 10426
Content-Type: text/html
Cache-control: private
从响应消息里可以看出,长度Content-Length还是和GET命令一致,只是后面没有包含正文部分。
我们就可以通过这个长度字段判断对象是否有所改变,如果有Lastmodified就更好判断了。
那么如何获得这个响应头呢?
需要使用QueryInfo()函数查询,代码如下:
bool QueryHead()
{
BOOL bRet = FALSE;
CString csHeaders, csOptionalData = “”;
CString lpszURL = “www.wantsoft.com”;
CString lpszObjectName = “/default.asp”;
CString lpszReferer = “”;
CString csResponse;
csHeaders += “Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*n”;
csHeaders += “Referer: http://“;
csHeaders += lpszURL;
csHeaders += lpszReferer;
csHeaders += “n”;
csHeaders += “Accept-Language: zh-cn,en-us;q=0.5n”;
csHeaders += “Content-Type: application/x-www-form-urlencodedn”;
csHeaders += “Proxy-Connection: Keep-Aliven”;
csHeaders += “User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; .NET CLR 1.0.3705; .NET CLR 1.1.4322)n”;
csHeaders += “Host: “;
csHeaders += lpszURL;
csHeaders += “n”;
csHeaders += “Pragma: no-cachen”;
csHeaders += “rn”;
CHttpFile* pMyHttpFile = NULL;
CHttpConnection* pConnection = NULL;
CInternetSession mySession;
try
{
mySession.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 10*1000);
pConnection = mySession.GetHttpConnection(_T(lpszURL));
pMyHttpFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_HEAD, lpszObjectName);
if ( pMyHttpFile->SendRequest(csHeaders,
(LPVOID)(LPCTSTR)csOptionalData, csOptionalData.GetLength()) )
{
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
pMyHttpFile->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
if ( HTTP_STATUS_OK == dwStatus )
{
pMyHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH ,dwBuffLen);
csResponse.Format(“HTTP_QUERY_CONTENT_LENGTH =%d”,dwBuffLen);
MessageBox(csResponse);
bRet = TRUE;
}
}
}
catch ( CInternetException* pEx )
{
bRet = FALSE;
TCHAR szErr[1024]={0};
pEx->GetErrorMessage(szErr,1024);
pEx->Delete();
}
if ( pMyHttpFile )
{
pMyHttpFile->Close();
delete pMyHttpFile;
}
if ( pConnection )
{
pConnection->Close();
delete pConnection;
}
mySession.Close();
return bRet;
}
本文版权属于《Visual C++网络游戏建模与实现》作者苏羽和http://www.wantsoft.com共同所有,引用者请务必保留本行版权信息,否则作者苏羽和http://www.wantsoft.com保留追究的权利。
Head命令格式如下,其具体参数请参考GET方法.
HEAD / HTTP/1.1
以下为一次典型的Head命令:
HEAD /index.asp HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*
Referer: http://www.wantsoft.com
Accept-Language: zh-cn,en-us;q=0.5
Content-Type: application/x-www-form-urlencoded
Cookie: ASPSESSIONIDSCRTQDCC=FBKBLOLBJNPDNKKLNCAAEJIO
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: www.wantsoft.com
Pragma: no-cache
Content-Length: 0
Cache-Control: no-cache
响应消息如下:
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.1
Date: Tue, 25 Nov 2008 05:53:35 GMT
Content-Length: 10426
Content-Type: text/html
Cache-control: private
从响应消息里可以看出,长度Content-Length还是和GET命令一致,只是后面没有包含正文部分。
我们就可以通过这个长度字段判断对象是否有所改变,如果有Lastmodified就更好判断了。
那么如何获得这个响应头呢?
需要使用QueryInfo()函数查询,代码如下:
bool QueryHead()
{
BOOL bRet = FALSE;
CString csHeaders, csOptionalData = “”;
CString lpszURL = “www.wantsoft.com”;
CString lpszObjectName = “/default.asp”;
CString lpszReferer = “”;
CString csResponse;
csHeaders += “Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash, */*n”;
csHeaders += “Referer: http://“;
csHeaders += lpszURL;
csHeaders += lpszReferer;
csHeaders += “n”;
csHeaders += “Accept-Language: zh-cn,en-us;q=0.5n”;
csHeaders += “Content-Type: application/x-www-form-urlencodedn”;
csHeaders += “Proxy-Connection: Keep-Aliven”;
csHeaders += “User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; .NET CLR 1.0.3705; .NET CLR 1.1.4322)n”;
csHeaders += “Host: “;
csHeaders += lpszURL;
csHeaders += “n”;
csHeaders += “Pragma: no-cachen”;
csHeaders += “rn”;
CHttpFile* pMyHttpFile = NULL;
CHttpConnection* pConnection = NULL;
CInternetSession mySession;
try
{
mySession.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT, 10*1000);
pConnection = mySession.GetHttpConnection(_T(lpszURL));
pMyHttpFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_HEAD, lpszObjectName);
if ( pMyHttpFile->SendRequest(csHeaders,
(LPVOID)(LPCTSTR)csOptionalData, csOptionalData.GetLength()) )
{
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
pMyHttpFile->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
if ( HTTP_STATUS_OK == dwStatus )
{
pMyHttpFile->QueryInfo(HTTP_QUERY_CONTENT_LENGTH ,dwBuffLen);
csResponse.Format(“HTTP_QUERY_CONTENT_LENGTH =%d”,dwBuffLen);
MessageBox(csResponse);
bRet = TRUE;
}
}
}
catch ( CInternetException* pEx )
{
bRet = FALSE;
TCHAR szErr[1024]={0};
pEx->GetErrorMessage(szErr,1024);
pEx->Delete();
}
if ( pMyHttpFile )
{
pMyHttpFile->Close();
delete pMyHttpFile;
}
if ( pConnection )
{
pConnection->Close();
delete pConnection;
}
mySession.Close();
return bRet;
}
本文版权属于《Visual C++网络游戏建模与实现》作者苏羽和http://www.wantsoft.com共同所有,引用者请务必保留本行版权信息,否则作者苏羽和http://www.wantsoft.com保留追究的权利。