【发布时间】:2011-06-10 17:34:59
【问题描述】:
我从一个 MSDN 博客中采用了这段代码,并添加了 webclient 来下载资源..
string formUrl = "My login url";
string formParams = string.Format("userName={0}&password={1}&x={2}&y={3}&login={4}", "user", "password","0","0","login");
string cookieHeader;
WebRequest req = WebRequest.Create(formUrl);
req.ContentType = "application/x-www-form-urlencoded";
req.Method = "POST";
byte[] bytes = Encoding.ASCII.GetBytes(formParams);
req.ContentLength = bytes.Length;
using (Stream os = req.GetRequestStream())
{
os.Write(bytes, 0, bytes.Length);
}
WebResponse resp = req.GetResponse();
cookieHeader = resp.Headers["Set-cookie"];
string pageSource;
string getUrl = "Resource url";
WebRequest getRequest = WebRequest.Create(getUrl);
getRequest.Headers.Add("Cookie", cookieHeader);
WebResponse getResponse = getRequest.GetResponse();
using (StreamReader sr = new StreamReader(getResponse.GetResponseStream()))
{
pageSource = sr.ReadToEnd();
System.Console.WriteLine(sr.ToString());
}
WebClient wc = new WebClient();
wc.Headers["Content-Type"] = "application/x-www-form-urlencoded";
wc.DownloadFile("Resource url","C:\\abc.tgz");
Console.Read();
但是 abc.tgz 并不是它应该的样子。因此,当我使用记事本打开它时,我注意到它是“我的登录 URL”页面的源文件.. 我哪里错了?
我可以使用 webclient 的任何属性来查看错误 .. 即 .. 基地址等吗?
【问题讨论】:
-
你确定所有表单域的名称都完全正确吗?
-
它不是在下载“源代码”——它是在为登录页面提供 HTML 服务;就这些。在大多数情况下,像这样的安全页面不适合抓取。您已检查这是否包含在网站条款和条件中是吗?
-
getUrl与formUrl不同。它们应该是两个单独的请求吗? -
听起来你的代码正在做它应该做的事情。它正在下载它被重定向到的页面。