是这样的服务器的布置是Apache,在服务器上有个更新包(1.cab)用于下载。
比如日期是19 Nov 2012 ;//这个是正常的日期。
正常下载后取回的响应头是这样的:
HTTP/1.1 206 Partial Content
Date: Sun, 25 Nov 2012 03:29:27 GMT
Server: Apache/2.2.4 (Win32) //这个是
Last-Modified: Mon, 19 Nov 2012 06:19:38 GMT//正常的日期
ETag: "c1f60-1a9a11-1a2315e8"
Accept-Ranges: bytes
Content-Length: 1595921
Content-Range: bytes 147456-1743376/1743377
Content-Type: text/plain但是有个电脑下载取回的回应头是这样的,这直接导致他下载的内容是一个月以前的更新包,但是那个服务器上根本就没有这个更新包。
HTTP/1.1 206 Partial Content
Server: nginx //这个也不一样好像是通过代理什么的,我也不是很清楚,我觉得问题很可能就跟这个有关
Date: Wed, 21 Nov 2012 10:11:10 GMT
Content-Type: application/octet-stream
Content-Length: 20736
Last-Modified: Thu, 11 Oct 2012 00:42:48 GMT//这个想不通啊,这个是很久以前的更新 包,根本就不存在。除非在nginx上面。那我该怎么办??
Connection: keep-alive
Content-Range: bytes 1772544-1793279/1793280
比如日期是19 Nov 2012 ;//这个是正常的日期。
正常下载后取回的响应头是这样的:
HTTP/1.1 206 Partial Content
Date: Sun, 25 Nov 2012 03:29:27 GMT
Server: Apache/2.2.4 (Win32) //这个是
Last-Modified: Mon, 19 Nov 2012 06:19:38 GMT//正常的日期
ETag: "c1f60-1a9a11-1a2315e8"
Accept-Ranges: bytes
Content-Length: 1595921
Content-Range: bytes 147456-1743376/1743377
Content-Type: text/plain但是有个电脑下载取回的回应头是这样的,这直接导致他下载的内容是一个月以前的更新包,但是那个服务器上根本就没有这个更新包。
HTTP/1.1 206 Partial Content
Server: nginx //这个也不一样好像是通过代理什么的,我也不是很清楚,我觉得问题很可能就跟这个有关
Date: Wed, 21 Nov 2012 10:11:10 GMT
Content-Type: application/octet-stream
Content-Length: 20736
Last-Modified: Thu, 11 Oct 2012 00:42:48 GMT//这个想不通啊,这个是很久以前的更新 包,根本就不存在。除非在nginx上面。那我该怎么办??
Connection: keep-alive
Content-Range: bytes 1772544-1793279/1793280
解决方案 »
- 关于Richedit中插入动态Gif的问题,麻烦大家帮忙看一下~
- 如何让列表框实时显示计算结果?
- 为我的、你的、他(她)的母亲健康!快乐!顺心如意!。。。散分~
- ado的_CommandPtr调用存储过程时能不能既得到output值,又得到结果集?
- 一个非常奇怪的问题?请教高手!!!!
- 求lsearch 代码
- 程序中使用DrawDibBegin函数出现链接错误
- 散分!大家初学VC时都做了些什么小程序呢?
- 一个矩形对象m_rect,不改变大小,怎样使它的位置改为鼠标位置(已知为point)??????
- 我现在大四,请问一下各位现在的或当年的毕业设计题目是什么,怎么搞的,有什么收获?能谈一下吗?
- vc 动态库问题
- vs2010 编写的ATL生成的dll文件不能被其他程序使用?
//下载指定的html文件
//参数:const char *url 需要下载文件的url
// char *sFileBuffer 接受返回的数据(数据的内存由调用者生成和释放)
char * CHTTPDownFile::GetHttpFile(const char *url, int &nBufLength, const int nBufferLength)
{
char *error=NULL;
error=new char[MAX_PATH];
char * sFileBuffer = NULL;
sFileBuffer = new char[DEFUALT_HTTP_FILE_BUFFER_LEN]; //默认分配10*512kb
memset(sFileBuffer, 0, DEFUALT_HTTP_FILE_BUFFER_LEN);
int nCurUseBufferLength=nBufferLength;
if(url == NULL || sFileBuffer == NULL || nBufferLength <= 0)
return error;
int iRecSum = 0; //一共下载了多少
try
{
DWORD dwServiceType = AFX_INET_SERVICE_HTTP;
CString szServer, szObject;
INTERNET_PORT nPort = 0;
if(!AfxParseURL(url, dwServiceType, szServer, szObject, nPort))
return error;
CInternetSession mysession;
CHttpConnection* pConnection=NULL;
CHttpFile* pHttpFile=NULL; pConnection = mysession.GetHttpConnection(szServer,
INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_RELOAD | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_DONT_CACHE,
nPort, NULL, NULL); DWORD dwFlag= INTERNET_FLAG_EXISTING_CONNECT |
INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE|INTERNET_FLAG_NO_COOKIES;
pHttpFile = pConnection->OpenRequest("GET", szObject,
NULL, 0, NULL, NULL
,dwFlag);
char szTempFile[MAX_PATH]={0};
strcpy(szTempFile,m_sCurrentLocalPath);
strcat(szTempFile,".td");
long dwLength=0;
FILE *fp=NULL;
fp=fopen(szTempFile,"rb");
char StartPos[20]="0";
if(fp!=NULL)
{
fseek(fp,0,SEEK_END); //定位到文件末
dwLength = ftell(fp); //文件长度
itoa(dwLength,StartPos,10);
fseek(fp,0,SEEK_SET); //定位到文件tou
fread(sFileBuffer,dwLength,1,fp);
fclose(fp);
fp=NULL;
}
iRecSum=dwLength;
CString sTempHeader;
sTempHeader.Format("GET %s HTTP/1.1\r\n",url);
pHttpFile->AddRequestHeaders(sTempHeader);
pHttpFile->AddRequestHeaders("Accept: */*\r\n");
pHttpFile->AddRequestHeaders("Pragma: no-cache\r\n");
pHttpFile->AddRequestHeaders("Cache-Control: no-cache\r\n");
CString strFilePath,strHttpAddr(url);
int pos=strHttpAddr.Find( "/", 9 );
strFilePath = strHttpAddr.Mid(0,pos);
sTempHeader.Format("Referer: %s\r\n",strFilePath);
pHttpFile->AddRequestHeaders(sTempHeader);
pHttpFile->AddRequestHeaders("User-Agent:Mozilla/4.0(compatible; MSIE 5.0; Windows NT;)\r\n");
sTempHeader.Format("Range:bytes=%s-\r\n\r\n",StartPos);
pHttpFile->AddRequestHeaders(sTempHeader);
if(pHttpFile->SendRequest(NULL))
{
DWORD dwHttpStatus;
if (!pHttpFile->QueryInfoStatusCode(dwHttpStatus))
dwHttpStatus = 200;
if(dwHttpStatus >= 400)
{
m_nDownloadStatus = FILE_DOWNLOAD_NO_FILE;
return error;
}
CString strhttpFileLength;
pHttpFile->QueryInfo (HTTP_QUERY_CONTENT_LENGTH, strhttpFileLength);
m_nTotal=atoi(strhttpFileLength)+dwLength;
int nRead = 1024;
int iMaxRecvLen = 1024;
char pBuffer[1024] = {0};
while (nRead == 1024 && !m_bStopHtmlDownd)
{
memset(pBuffer, 0, 1024);
nRead = pHttpFile->Read(pBuffer, iMaxRecvLen);
memcpy(sFileBuffer+iRecSum, pBuffer, nRead);
WriteToTempFile(szTempFile,(byte *)pBuffer,nRead);
iRecSum += nRead;
m_hasDown=iRecSum;
}
nBufLength=iRecSum;
if(pHttpFile!=NULL)
pHttpFile->Close();
if(pConnection!=NULL)
pConnection->Close();
mysession.Close();
if(m_bStopHtmlDownd)
{
m_nDownloadStatus = FILE_DOWNLOAD_USER_STOP; //用户主动中断下载
nBufLength=-1;
return error;
}
}
return sFileBuffer;
}