WEB开发网
开发学院软件开发VC 用HTTP代理下载文件详例 阅读

用HTTP代理下载文件详例

 2007-03-22 21:31:27 来源:WEB开发网   
核心提示:为了帮网友些个用http下载动画的程序,临时在网上翻了翻,用HTTP代理下载文件详例,看看有没有利用http代理来下载的例子,结果,别忘了告诉我一下,CString strHost="111.111.111.111 ";CString DownLoadAddress="http://www

为了帮网友些个用http下载动画的程序,临时在网上翻了翻,看看有没有利用http代理来下载的例子。结果,似乎很多人都愿意去转载一个有头无尾的例子,还美其名曰“我在查阅RFC文档和相关资料后,特总结一些TCP协议穿透代理服务器的程序片断,希望对大家有所帮助。”

如果真的想帮助大家,为什么不说的详细一些?

无奈之下,自己去翻rfc文档,找了些资料,写了这个利用http代理来下载文件的资料

代码如下。

(1)一些基本变量

SOCKET HTTPSocket; // 主socket
struct sockaddr_in SocketAddr; // address socket
struct sockaddr_in BindSocket; // for bind
int m_nRecvTimeout; // recieve timeout
int m_nSendTimeout; // send timeout
WSADATA wsaData;
// 要下载文件部分。好像在BindSocket.sin_addr.s_addr = inet_addr (strHost);时,只能使用ip地址,所以了。。。
// 如果谁知道更好的方法,别忘了告诉我一下。
CString strHost="111.111.111.111 ";
CString DownLoadAddress="http://www.aitenshi.com/bbs/images/";
CString hostFile="logo.gif";
int HttpPort=80;

(2)一些函数,用来取得http头,和获取文件大小

int GetFileLength(char *httpHeader)
{
CString strHeader;
int local;
strHeader=(CString)httpHeader;
local=strHeader.Find("Content-Length",0);
local+=16;
strHeader.Delete(0,local);
local=strHeader.Find("
");
strHeader.SetAt(local,'');
char temp[30];
strcpy(temp,strHeader.GetBuffer(strHeader.GetLength()));
return atoi(temp);
}
int GetHttpHeader(SOCKET sckDest,char *str)
{
BOOL m_bResponsed=0;
int m_nResponseHeaderSize;
if(!m_bResponsed)
{
char c = 0;
int nIndex = 0;
BOOL bEndResponse = FALSE;
while(!bEndResponse && nIndex < 1024)
{
recv(sckDest,&c,1,0);
str[nIndex++] = c;
if(nIndex >= 4)
{
if(str[nIndex - 4] == '
' && str[nIndex - 3] == '
'
&& str[nIndex - 2] == '
' && str[nIndex - 1] == '
')
bEndResponse = TRUE;
}
}
m_nResponseHeaderSize = nIndex;
m_bResponsed = TRUE;
}
return m_nResponseHeaderSize;
}

1 2 3  下一页

Tags:HTTP 代理 下载

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接