Search code examples
c#.netdownloadhttp-redirectdownloading-website-files

How to get the content type of a file from a redirecting page?


I have a application, which logs you on to a website and then downloads some files from that website.

Although, I have been able to download all the type of files and save them properly except whose link redirects to another page.

for ex if in the source code of the web page , the link address is written as :-

"http://someurl.com/view.php", then this link redirects and the download immediately starts(when we click on the link in a web brwoser).

I have been able to download this file programmatically using HttpWebRequest
and then setting the AllowAutoRedirect = true.

The problem arises while saving, I need to have the extension of the downloaded file(whether it is a word document, pdf file or some other file)

How should I check that?

Some of the code which I am using is :-

     HttpWebRequest request = WebRequest.Create(UriObj) as HttpWebRequest;
     request.Proxy = null;
     request.CookieContainer = CC;
     request.AllowAutoRedirect = true ; 
     request.ContentType = "application/x-www-form-urlencoded";

Solution

  • When you get a redirected response, the ResponseUri property will give you the URI of the resource that actually responded.

    So if http://someurl.com/view.php redirected to http://example.com/foo.doc, then ResponseUri will contain http://example.com/foo.doc.

    Understand that the "extension" might not be what you expect. For example, I've seen a URL like http://example.com/document.php return a PDF file. I've seen URLs with ".mp3" extension return image files, etc.

    You can check the ContentType header, which is usually a more reliable indicator of the actual content of the response, but not a guarantee.