此问题是我previous question关于从ASPX页面获取HTML的后续问题。我决定尝试使用webclient对象,但问题是我得到了登录页面的HTML,因为需要登录。我尝试使用webclient对象“登录”:
WebClient ww = new WebClient();
ww.DownloadString("Login.aspx?UserName=&Password=");
string html = ww.DownloadString("Internal.aspx");
但我仍然会一直登录页面。我知道用户名信息不存储在cookie中。我必须做错事或遗漏一个重要的部分。有谁知道它可能是什么?
答案 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发送信息。