【发布时间】:2018-07-31 13:25:05
【问题描述】:
我正在尝试自动从某个网站下载文本文件列表。下载一个文本文件的过程是这样的:
- 单击文件名会打开一个弹出窗口。
- 内容在弹出窗口中 // 它可以作为字符串下载,但它太大而无法使用 StreamWriter 下载,因为我遇到了内存不足的异常。
- 右击->另存为。
我想用 HttpWebRequest 下载这个文件。
我的代码如下所示:
string sTmpCookieString = GetGlobalCookies(webBrowser1.Url.AbsoluteUri);
HttpWebRequest fstRequest = (HttpWebRequest)WebRequest.Create(URL);
fstRequest.Method = "GET";
fstRequest.CookieContainer = new System.Net.CookieContainer();
fstRequest.CookieContainer.SetCookies(webBrowser1.Document.Url, sTmpCookieString);
HttpWebResponse fstResponse = (HttpWebResponse)fstRequest.GetResponse();
StreamReader sr = new StreamReader(fstResponse.GetResponseStream());
string sPageData = sr.ReadToEnd();
sr.Close();
string sViewState = ExtractInputHidden(sPageData, "__VIEWSTATE");
string sEventValidation = this.ExtractInputHidden(sPageData, "__EVENTVALIDATION");
string sUrl = URL;
HttpWebRequest hwrRequest = (HttpWebRequest)WebRequest.Create(sUrl);
hwrRequest.Method = "POST";
hwrRequest.CookieContainer = new System.Net.CookieContainer();
string sPostData = "__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=" + sViewState + "&__EVENTVALIDATION=" + sEventValidation + "&Name=test" + "&Button1=Button";
byte[] bByteArray = Encoding.UTF8.GetBytes(sPostData);
hwrRequest.ContentType = "text/plain";
hwrRequest.CookieContainer.SetCookies(webBrowser1.Document.Url, sTmpCookieString);
hwrRequest.ContentLength = bByteArray.Length;
Stream sDataStream = hwrRequest.GetRequestStream();
sDataStream.Write(bByteArray, 0, bByteArray.Length);
sDataStream.Close();
using (WebResponse response = hwrRequest.GetResponse())
{
using (sDataStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(sDataStream);
{
string sResponseFromServer = reader.ReadToEnd();
FileStream fs = File.Open(path, FileMode.OpenOrCreate, FileAccess.Write);
Byte[] info = new System.Text.UTF8Encoding(true).GetBytes(sResponseFromServer);
fs.Write(info, 0, info.Length);
fs.Close();
}
}
}
..我不断得到 HTML 的样子:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252" />
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR" />
...
我认为我的问题在某个地方可能对某人来说不清楚。因此,如果有人指出,我会尽力详细解释。
我会提前感谢任何帮助。
【问题讨论】:
标签: c# winforms download httpwebrequest