最近需要做一个下载器
但是,链接是经过转向了的
如何获取转向后的链接进行下载?
搞了好久,网上也没什么具体资料
谢谢~

解决方案 »

  1.   

    在IE栏的表象是:输入一个甲URL,会发现会跳转成另一个乙URL
    现在我想在程序里向甲提出请求,想获取乙URL
      

  2.   

    在IE栏的表象是:输入一个甲URL,会发现会跳转成另一个乙URL
    现在我想在程序里向甲提出请求,想获取乙URL看看http协议,好像重定向的话是返回3××码的,重定向的地址在header里面
    可以分析得到的
      

  3.   

    正好我这几天也在写http下载的东西.
    发送GET http://....... HTTP/1.1如果发现返回location头,找到这个头的value就可以了
    然后分析是重定向了其他新的站点还是重定向到了本网站其他目录下,目录还要分析是相对目录还是根目录,
    就这样.我还在调试我的东东.....\
      

  4.   

    根据服务器返回的报头 ,先看状态码,如果是300-400之间说明URL重定向。。
    然后查找返回报头的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;
    }