从Web登录C#下载文件

我已经可以使用此代码登录到具有重定向(我正在保存cookie)的网页

CookieCollection cookies = new CookieCollection(); HttpWebRequest cookieRequest = (HttpWebRequest)WebRequest.Create("https://www.loginpage.com/"); cookieRequest.CookieContainer = new CookieContainer(); cookieRequest.CookieContainer.Add(cookies); HttpWebResponse cookieResponse = (HttpWebResponse)cookieRequest.GetResponse(); cookies = cookieResponse.Cookies; string postData = "name=********&password=*********&submit=submit"; HttpWebRequest loginRequest = (HttpWebRequest)WebRequest.Create("https://www.loginpage.com/"); loginRequest.CookieContainer = new CookieContainer(); loginRequest.CookieContainer.Add(cookies); loginRequest.Method = WebRequestMethods.Http.Post; loginRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; loginRequest.AllowWriteStreamBuffering = true; loginRequest.ProtocolVersion = HttpVersion.Version11; loginRequest.AllowAutoRedirect = true; loginRequest.ContentType = "application/x-www-form-urlencoded"; byte[] byteArray = Encoding.ASCII.GetBytes(postData); loginRequest.ContentLength = byteArray.Length; Stream newStream = loginRequest.GetRequestStream(); //open connection newStream.Write(byteArray, 0, byteArray.Length); // Send the data. newStream.Close(); 

这工作正常,但我需要从那里下载.xls文件,它位于这里(例如)

 https://www.loginpage.com/export_excel.php?export_type=list 

为此我尝试了这段代码

  HttpWebRequest wr = (HttpWebRequest)HttpWebRequest.Create("https://www.loginpage.com/export_excel.php?export_type=list"); HttpWebResponse ws = (HttpWebResponse)wr.GetResponse(); Stream str = ws.GetResponseStream(); byte[] inBuf = new byte[100000]; int bytesReadTotal = 0; string path = @"d:\test.xlsx"; FileStream fstr = new FileStream(path, FileMode.Create, FileAccess.Write); while (true) { int n = str.Read(inBuf, 0, 100000); if ((n == 0) || (n == -1)) { break; } fstr.Write(inBuf, 0, n); bytesReadTotal += n; } str.Close(); fstr.Close(); 

但它不起作用,现在我坚持这个

  string dLink = "https://www.loginpage.com/export_excel.php?export_type=list"; HttpWebRequest fileRequest = (HttpWebRequest)HttpWebRequest.Create(dLink); fileRequest.CookieContainer = new CookieContainer(); fileRequest.CookieContainer.Add(cookies); fileRequest.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; HttpWebResponse fileResponse = (HttpWebResponse)fileRequest.GetResponse(); for (int i = 0; i < fileResponse.Headers.Count; ++i) richTextBox1.Text += "\nHeader Name: " + fileResponse.Headers.Keys[i] + ", Value :" + fileResponse.Headers[i]; 

当然它不是下载文件。 我现在正试图获取标题,以便了解我从网络上获得的内容? 我已经使用我的脚本从rghost或filehippo这样的文件页面下载了一些文件,但是这个文件没有用。

这应该做的工作!

  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"); 

我使用过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; } } 

来源和信用: CookieAwareWebClient

如果客户帐户已经是该网站的有效用户,则您只需在下载前使用默认凭据,如下所示。

 WebClient Client=new WebClient(); Client.UseDefaultCredentials=true; Client.DownloadFile(url, destination);