C# download file from the web with login

前端 未结 2 1277
-上瘾入骨i
-上瘾入骨i 2021-01-03 08:48

I can already login to the web page with redirect (i am saving cookies) with this code

   CookieCollection cookies = new CookieCollection();
        HttpWeb         


        
相关标签:
2条回答
  • 2021-01-03 09:00

    This should do the job!

            CookieContainer cookieJar = new CookieContainer();
            CookieAwareWebClient http = new CookieAwareWebClient(cookieJar);
    
            string postData = "name=********&password=*********&submit=submit";
            string response = http.UploadString("https://www.loginpage.com/", postData);
    
            // validate your login! 
    
            http.DownloadFile("https://www.loginpage.com/export_excel.php?export_type=list", "my_excel.xls");
    

    I have used CookieAwareWebClient

    public class CookieAwareWebClient : WebClient
    {
        public CookieContainer CookieContainer { get; set; }
        public Uri Uri { get; set; }
    
        public CookieAwareWebClient()
            : this(new CookieContainer())
        {
        }
    
        public CookieAwareWebClient(CookieContainer cookies)
        {
            this.CookieContainer = cookies;
        }
    
        protected override WebRequest GetWebRequest(Uri address)
        {
            WebRequest request = base.GetWebRequest(address);
            if (request is HttpWebRequest)
            {
                (request as HttpWebRequest).CookieContainer = this.CookieContainer;
            }
            HttpWebRequest httpRequest = (HttpWebRequest)request;
            httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            return httpRequest;
        }
    
        protected override WebResponse GetWebResponse(WebRequest request)
        {
            WebResponse response = base.GetWebResponse(request);
            String setCookieHeader = response.Headers[HttpResponseHeader.SetCookie];
    
            if (setCookieHeader != null)
            {
                //do something if needed to parse out the cookie.
                if (setCookieHeader != null)
                {
                    Cookie cookie = new Cookie(); //create cookie
                    this.CookieContainer.Add(cookie);
                }
            }
            return response;
        }
    }
    

    Source & Credit for : CookieAwareWebClient

    0 讨论(0)
  • 2021-01-03 09:07

    If the client account is already a valid user of the site you just need to use the default credentials before downloading, like so..

    WebClient Client=new WebClient();
    Client.UseDefaultCredentials=true;
    Client.DownloadFile(url, destination);
    
    0 讨论(0)
提交回复
热议问题