有没有办法传递登录信息来读取C#中的网站?

时间:2010-11-02 21:55:02

标签: c# authentication webrequest

我想用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代码中传递这些凭据吗?

2 个答案:

答案 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