How to download file from url that redirects?

前端 未结 2 1357
情深已故
情深已故 2020-12-12 02:04

i\'m trying to download a file from a link that doesn\'t contain the file, but instead it redirects to another (temporary) link that contains the actual file. The objective

相关标签:
2条回答
  • 2020-12-12 02:41

    I guess the easy option is simply this (after what you've got there.. and the URL you provided in place of http://www.contoso.com):

    using (var responseStream = myHttpWebResponse.GetResponseStream()) {
        using (var fileStream = 
                  new FileStream(Path.Combine("folder_here", "filename_here"), FileMode.Create)) {
            responseStream.CopyTo(fileStream);
        }
    }
    

    EDIT:

    In fact, this won't work. It isn't a HTTP redirect that downloads the file. Look at the source of that page.. you'll see this:

    <meta http-equiv="refresh" content="3; url=http://download.bleepingcomputer.com/dl/1f92ae2ecf0ba549294300363e9e92a8/52ee41aa/windows/security/security-utilities/m/minitoolbox/MiniToolBox.exe">
    

    It basically uses the browser to redirect. Unfortunately what you're trying to do won't work.

    0 讨论(0)
  • 2020-12-12 03:01

    I switched from a WebClient based approach to a HttpWebRequest too because auto redirects didn't seem to be working with WebClient. I was using similar code to yours but could never get it to work, it never redirected to the actual file. Looking in Fiddler I could see I wasn't actually getting the final redirect.

    Then I came across some code for a custom version of WebClient in this question:

    class CustomWebclient: WebClient
    {
      [System.Security.SecuritySafeCritical]
      public CustomWebclient(): base()
      {
      }
    
      public CookieContainer cookieContainer = new CookieContainer();
    
      protected override WebRequest GetWebRequest(Uri myAddress)
      {
        WebRequest request = base.GetWebRequest(myAddress);
        if (request is HttpWebRequest)
        {
          (request as HttpWebRequest).CookieContainer =   cookieContainer;
          (request as HttpWebRequest).AllowAutoRedirect = true;
        }
        return request;
      }
    }
    

    The key part in that code is AllowAutoRedirect = true, it's supposed to be on by default according to the documentation, which states:

    AllowAutoRedirect is set to true in WebClient instances.

    but that didn't seem to be the case when I was using it.

    I also needed the CookieContainer part for this to work with the SharePoint external URLs we were trying to access.

    0 讨论(0)
提交回复
热议问题