首 页文章中心下载中心繁體中文
设为首页
加入收藏
联系我们
您当前的位置:开源盛世-源代码下载网 -> 文章中心 -> VC++专区 -> 文章内容 退出登录 用户管理
栏目导航
· VC++专区 · V B 专区
· GIS 专区 · PDA 专区
· 其他编程 · 网站开发类
· 数据库类 · 软件应用
· 网络安全 · 论文专区
· 综合资讯
热门文章
· Tab Control控件使用...
· 学生档案管理系统
· [图文] 排列组合公式
· UTF-8与GB2312之间的...
· DirectShow下载安装...
· Virtual PC 在PAE模...
· Windows2000终端服务...
· MapInfo上的GIS系统...
· Mapbasic参考手册索...
· MapX应用开发中文讲...
相关文章
用VC开发下载程序突破防盗链设置的探讨
作者:Polaris  来源:开源盛世-源代码下载网  发布时间:2005-12-5 16:53:23  发布人:Polaris

减小字体 增大字体

最近想做个自动采集程序,发现不能下载有防盗链功能的网址(本站网址就是这样,好像自己在撬自家的锁哦!^_^),上CSDN问了一下,没有太多帮助,倒是自己慢慢研究出来了,把CSDN的发帖记录转到这里吧,作为一次探讨型的技术文章^_^

如何编写像FlashGet那样带引用地址的下载程序?

现在有很多下载地址有防盗链的处理,我写的下载程序不能获得该地址的真实文件路径,但FlashGet采用了一个引用页面的地址设置,这样它就可以下载了,请问这是什么原理啊?在VC中应该如何设置?我用的WinInet写的。
我是想自己写一个下载的程序,比如在这个网址
http://www.vscodes.com/Software/Catalog7/558.html
下面的下载地址为
http://www.vscodes.com/down.asp?id=556&downid=0
我直接采用http://www.vscodes.com/down.asp?id=556&downid=0这个地址下载(用自己的程序,不是右键另存或直接点击),它就会得到<script href='http://www.vscodes.com'></script>,而不是下载的文件。
但我用FlashGet下载时,它就能够下载到文件,我想做成这个样子!

有哪位大哥做过这样的程序啊?

asp页面进行了HTTP_REFERER判断。
我好像找到点思路了,用OpenRequest的时候里面有个一个Referer参数,但我SendRequest的时候就抛出异常了这是怎么回事啊?
代码日下:
void CWinInetDlg::OnBnClickedBtnDownload()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE);
CHttpConnection* pConnection;
CHttpFile* pFile;
CInternetSession session(NULL, 0);
DWORD dwRet;
char szBuff[1023];
BOOL result;
try
{
pConnection = session.GetHttpConnection("http://www.vscodes.com");
pFile = pConnection->OpenRequest(CHttpConnection::HTTP_VERB_GET,m_sUrl,"http://www.vscodes.com/Software/Catalog7/558.html",1,NULL,NULL,INTERNET_FLAG_RELOAD|INTERNET_FLAG_DONT_CACHE);
result = pFile->SendRequest();
pFile->QueryInfoStatusCode(dwRet);
CString strPage;
if (dwRet == HTTP_STATUS_OK)
{
memset(szBuff,0,1023);
UINT nRead = pFile->Read(szBuff, 1023);
strPage=szBuff;
while (nRead > 0)
{
memset(szBuff,0,1023);
nRead = pFile->Read(szBuff,1023);
strPage+=szBuff;
//read file...
}
}
else
{
}
if(pFile!=NULL)
{
delete pFile;
pFile=NULL;
}
if(pConnection!=NULL)
{
delete pConnection;
pConnection =NULL;
}
m_sContent = strPage;
}
catch (CInternetException* pEx)
{
if(pFile!=NULL)
{
delete pFile;
pFile=NULL;
}
if(pConnection!=NULL)
{
delete pConnection;
pConnection =NULL;
}
pEx->Delete();
}
UpdateData(FALSE);
}

现在下载下来了,上面的问题在于pConnection = session.GetHttpConnection("http://www.vscodes.com");
应该用pConnection = session.GetHttpConnection("www.vscodes.com");

但又出了新的问题:它直接给我下载下来了,我如何得到真实的文件名啊?
算了,结贴吧,感谢楼上各位兄弟的关注!我把我知道的写下来吧:
在请求中添加"Referer:"参数加入引用页面,就可以突破防盗链的代码了;因为防盗链的代码原理是:
server_v1 = CStr(Request.ServerVariables("HTTP_REFERER"))
server_v2 = CStr(Request.ServerVariables("SERVER_NAME"))
If Mid(server_v1, 8, Len(server_v2)) = server_v2 Then
CheckPost = True
End If
用OpenRequest好像它直接识别了文档中的Redirect代码,所以直接下载下来了。我用自己写的代码获得了
<head><title>Object moved</title></head>
<body><h1>Object Moved</h1>This object may be found <a HREF="/UploadFile/2005-12/200512481477409.rar">here</a>.</body>

这样的内容,也就找到了真实的文件名了。

 

End of《用VC开发下载程序突破防盗链设置的探讨》

[] [返回上一页] [打 印] [收 藏]
下一篇文章:VC网络程序设计二则
 
∷相关“用VC开发下载程序突破防盗链设置的探讨”文章评论∷
(评论内容只代表网友观点,与本站立场无关!) [更多评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 网站目录 鄂ICP备06007162
开源盛世 版权所有Copyright © 2003-2005 VSCodes.Com. All Rights Reserved.