从登录背后的页面获取HTML

时间:2020-03-05 18:52:56  来源:igfitidea点击:

这个问题是我之前关于从ASPX页面获取HTML的问题的跟进。我决定尝试使用webclient对象,但是问题是因为需要登录,所以我获得了登录页面的HTML。我尝试使用webclient对象进行"登录":

WebClient ww = new WebClient();

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

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

但是我仍然始终获得登录页面。我知道用户名信息未存储在Cookie中。我一定在做错事或者遗漏了重要的部分。有谁知道这可能是什么?

解决方案

回答

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

回答

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

回答

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

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

回答

我想到的唯一另一个原因是该网页有意阻止其登录。如果可以访问该代码,请查看用于查看是否有旨在阻止此类登录的任何内容的loggin系统。

回答

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

回答

只需将有效的登录参数传递给给定的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();
      }

回答

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

回答

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