有一个网站http://192.168.1.110/,(注:网站是直接放在根目录下的,不知道是IIS还是TOMCAT发布的)设置了BASIC认证,我现在需要通过WinForm程序访问该网站获取数据。
首先用下面一段常规代码:
Code
NetworkCredential myCredentials = new NetworkCredential("user", "pwd");
WebRequest myWebRequest = WebRequest.Create(http://192.168.1.110/);
myWebRequest.Credentials = myCredentials.GetCredential(new Uri("http://192.168.1.110/"), "Basic");
WebResponse myWebResponse = myWebRequest.GetResponse();
执行到最后一句直接抛出异常401未授权,这里需要说明的是以上代码没有问题,在测试项目中通过了,只对这个网站不起作用。后来研究了半天明白为什么了,HTTP头了少了SESSIONID,于是将代码修改如下:
Code
WebRequest wrqust = WebRequest.Create(new Uri("http://192.168.1.110/
wrqust.PreAuthenticate = true;
string a = "user:pwd";
byte[] b = System.Text.Encoding.Default.GetBytes(a);
a = Convert.ToBase64String(b);
wrqust.Headers.Add("Authorization", "Basic " + a);
wrqust.Headers.Add("Accept-Encoding", "gzip, deflate");
wrqust.Headers.Add("Accept-Language", "zh-cn");
wrqust.Headers.Add("Cookie", "SessionID=962IE22254");
WebResponse response=null;
try
{
response = wrqust.GetResponse();
}
catch(WebException e)
{
Console.WriteLine(e.Message);
}
竟然获取数据了,其中SessionID=962IE22254是用HTTPAnalyzerStdV2抓的HTTP头里的,如果将SessionID任意换一个则依然报401未授权的异常。
想提两个问题:
1、如何在第一次访问(没有加用户名、密码、SESSIONID)的时候通过程序获取SESSIONID?因为SESSIONID是在WebResponse 里获取的,而wrqust.GetResponse()这句直接报错,所以WebResponse为空,无法获取SEEIONID。
2、用NetworkCredential 类如何通过BASIC认证?我的代码没问题,为何通不过呢?