最近需要做一个下载器
但是,链接是经过转向了的
如何获取转向后的链接进行下载?
搞了好久,网上也没什么具体资料
谢谢~
但是,链接是经过转向了的
如何获取转向后的链接进行下载?
搞了好久,网上也没什么具体资料
谢谢~
解决方案 »
- ip长整型与字符串转换
- 播放器显示时怎么让窗口适应视频的大小来调整窗口的大小
- 求助+送分,大家帮忙帮忙
- 不建ODBC,VC能操作Access吗?
- 请问用PostQuitMessage( 0 );语句也可以退出程序,但用。。?
- 送分问题,点击菜单项后改变菜单项文字,巨简单?
- 如何在按下退格键时删除字符串的最后一个字符?
- VC+ADO,怎么实现把*.DBF表导入SQLServer2k里。
- 我在程序的Resource中存储了一个二进制数据资源,我该如何把他Load近来?
- CFile 替换文件的部分数据
- 跨网段,互ping不通,Socket却可以连上,这是为什么?
- 能不能不经过磁盘文件,直接在内存中生成一个网页(html格式文件),并且在view中显示html(类似浏览器那样浏览)
现在我想在程序里向甲提出请求,想获取乙URL
现在我想在程序里向甲提出请求,想获取乙URL看看http协议,好像重定向的话是返回3××码的,重定向的地址在header里面
可以分析得到的
发送GET http://....... HTTP/1.1如果发现返回location头,找到这个头的value就可以了
然后分析是重定向了其他新的站点还是重定向到了本网站其他目录下,目录还要分析是相对目录还是根目录,
就这样.我还在调试我的东东.....\
然后查找返回报头的Location字段。。分析之。。
代码如下测试通过 sFirstLine = sFirstLine.Left(nPos);
dwStatusCode = (DWORD)_ttoi((LPCTSTR)sFirstLine);
if( dwStatusCode >= 300 && dwStatusCode < 400 ) {
nPos = sHeader.Find(_T("location:"));
if (nPos == -1){
return HTTP_FAIL;
}
CString sRedirectFileName = sHeader.Mid(nPos + wcslen(_T("location:")));
nPos = sRedirectFileName.Find(_T("\r\n"));
if (nPos == -1){
return HTTP_FAIL;
}
sRedirectFileName = sRedirectFileName.Left(nPos);
sRedirectFileName.TrimLeft();
sRedirectFileName.TrimRight();
m_sReferer = m_sDownloadUrl;
nPos = sRedirectFileName.Find(_T("http://"));
if( nPos != -1 ){
m_sDownloadUrl = sRedirectFileName;
if ( !ParseURL(m_sDownloadUrl))
return HTTP_FAIL;
return HTTP_REDIRECT;
}
sRedirectFileName.Replace(_T("\\"),_T("/"));
if( sRedirectFileName[0] == '/' ){
m_sObject = sRedirectFileName;
return HTTP_REDIRECT;
}
int nParentDirCount = 0;
nPos = sRedirectFileName.Find(_T("../"));
while (nPos != -1){
sRedirectFileName = sRedirectFileName.Mid(nPos+3);
nParentDirCount++;
nPos = sRedirectFileName.Find(_T("../"));
}
for (int i=0; i<=nParentDirCount; i++){
nPos = m_sDownloadUrl.ReverseFind('/');
if (nPos != -1)
m_sDownloadUrl = m_sDownloadUrl.Left(nPos);
}
m_sDownloadUrl = m_sDownloadUrl+_T("/")+sRedirectFileName; if ( !ParseURL(m_sDownloadUrl)){
return HTTP_FAIL;
}
return HTTP_REDIRECT;
}