从登录背后的页面获取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系统。
回答
由于我要获取的aspx页面位于我自己的项目中,因此可以使用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请求和响应。