1

这个问题是我之前关于从 ASPX 页面获取 HTML 的问题的后续问题。我决定尝试使用 webclient 对象,但问题是我得到了登录页面的 HTML,因为需要登录。我尝试使用 webclient 对象“登录”:

WebClient ww = new WebClient();

 ww.DownloadString("Login.aspx?UserName=&Password=");

 string html = ww.DownloadString("Internal.aspx");

但是我仍然一直得到登录页面。我知道用户名信息没有存储在 cookie 中。我一定是做错了什么或者遗漏了重要的部分。有谁知道它可能是什么?

4

8 回答 8

2

尝试设置 WebClient 对象的凭据属性

WebClient ww = new WebClient();
ww.Credentials = CredentialCache.DefaultCredentials;
ww.DownloadString("Login.aspx?UserName=&Password=");
string html = ww.DownloadString("Internal.aspx");
于 2008-09-14T09:38:36.713 回答
1

那么用“Login.aspx?UserName=&Password=”在浏览器中打开页面正常工作吗?
某些页面可能不允许使用 url 中提供的数据登录,必须在页面上的登录表单中输入,然后提交。

于 2008-09-14T09:23:26.127 回答
1

我能想到的唯一另一个原因是网页故意阻止它登录。如果您有权访问代码,请查看用于查看是否有任何东西旨在阻止此类登录的登录系统。

于 2008-09-14T19:59:55.503 回答
1

只需将有效的登录参数传递给给定的 URI。应该能帮到你。

如果您没有登录信息,则不应试图规避它。

公共静态字符串 HttpPost(字符串 URI,字符串参数)
      {
         System.Net.WebRequest req = System.Net.WebRequest.Create(URI);
         req.ContentType = "应用程序/x-www-form-urlencoded";
         req.Method = "POST";
         byte[] bytes = System.Text.Encoding.ASCII.GetBytes( 参数 );
         req.ContentLength = bytes.Length;
         System.IO.Stream os = req.GetRequestStream();
         os.Write(字节,0,字节。长度);
         os.Close();
         System.Net.WebResponse resp = req.GetResponse();
         如果(resp == null)返回null;
         System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream());
         返回 sr.ReadToEnd().Trim();
      }
于 2008-09-15T20:09:53.193 回答
1

使用Fiddler查看通过浏览器手动执行时发生的 HTTP 请求和响应。

于 2008-09-24T03:29:22.093 回答
0

@Fire Lancer:我在测试期间问过自己同样的问题,所以我检查了一下,它确实可以在浏览器中使用。

于 2008-09-14T09:27:23.153 回答
0

由于我试图获取的 aspx 页面位于我自己的项目中,因此我可以使用 Server.Execute 方法。我对原始问题的回答中有更多详细信息

于 2008-09-15T20:03:45.393 回答
0

将 Firefox 与LiveHttpHeaders插件一起使用。
这将允许您通过实际的浏览器登录,并准确查看发送到服务器的内容。我的第一个问题是验证它不期望表单中的 POST。您正在加载的示例 URL 正在通过查询字符串 GET 发送信息。

于 2008-09-24T03:25:07.987 回答