从登录后面的页面获取HTML

时间:2008-09-14 09:19:09

标签: asp.net html screen-scraping

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

WebClient ww = new WebClient();

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

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

但我仍然会一直登录页面。我知道用户名信息不存储在cookie中。我必须做错事或遗漏一个重要的部分。有谁知道它可能是什么?

8 个答案:

答案 0 :(得分:2)

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

WebClient ww = new WebClient();
ww.Credentials = CredentialCache.DefaultCredentials;
ww.DownloadString("Login.aspx?UserName=&Password=");
string html = ww.DownloadString("Internal.aspx");

答案 1 :(得分:1)

通过“Login.aspx?UserName =& Password =”正常工作,在浏览器中打开页面是否正常工作?
某些页面可能不允许使用网址中提供的数据进行登录,并且必须在页面上的登录表单中输入,然后提交。

答案 2 :(得分:1)

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

答案 3 :(得分:1)

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

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

public static string HttpPost( string URI, string Parameters )
      {
         System.Net.WebRequest req = System.Net.WebRequest.Create( URI );
         req.ContentType = "application/x-www-form-urlencoded";
         req.Method = "POST";
         byte[] bytes = System.Text.Encoding.ASCII.GetBytes( Parameters );
         req.ContentLength = bytes.Length;
         System.IO.Stream os = req.GetRequestStream();
         os.Write( bytes, 0, bytes.Length );
         os.Close();
         System.Net.WebResponse resp = req.GetResponse();
         if ( resp == null ) return null;
         System.IO.StreamReader sr = new System.IO.StreamReader( resp.GetResponseStream() );
         return sr.ReadToEnd().Trim();
      }

答案 4 :(得分:1)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

由于我试图得到的aspx页面是在我自己的项目中,我可以使用Server.Execute方法。有关my answer原始问题的详细信息

答案 7 :(得分:0)

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