我想用C#读取一个网站:
WebRequest myWebRequest = WebRequest.Create("http://www.myurl.com/test.aspx");
WebResponse myWebResponse = myWebRequest.GetResponse();
Stream ReceiveStream = myWebResponse.GetResponseStream();
Encoding encode = System.Text.Encoding.GetEncoding("utf-8");
StreamReader readStream = new StreamReader(ReceiveStream, encode);
string strResponse = readStream.ReadToEnd();
问题是他们现在在页面上有身份验证,所以当我访问网站并输入用户名并登录时,我会收到登录提示。
我的代码现在返回错误:
The remote server returned an error: (401) Unauthorized.
我尝试添加这个:
myWebRequest.Credentials = new NetworkCredential("[username]", "[pwd]");
和此:
ServicePointManager.ServerCertificateValidationCallback += delegate { return true; };
但仍然遇到同样的错误:
无论如何都要在上面的WebRequest代码中传递这些凭据吗?
答案 0 :(得分:2)
如果网站使用HTTP基本身份验证(浏览器生成的登录对话框),您可以将HttpWebRequest
的{{1}}属性设置为Credentials
实例。
如果网站使用表单身份验证(基于HTML的登录表单;这种情况比较常见),则需要单独请求登录该站点并在请求之间共享NetworkCredential
以保留登录。
您可以使用Fiddler查看登录请求的外观。
答案 1 :(得分:1)
是的,您当然可以传递登录信息(当身份验证“包含基本身份验证(通常是应用程序驱动的操作系统帐户提示)或NTLM(集成文件安全性)”时):
myWebRequest.Credentials = new NetworkCredential("username","password");
更深入的见解:
http://www.west-wind.com/presentations/dotnetwebrequest/dotnetwebrequest.htm