2010-11-11 129 views
1

我以编程方式向远程服务器发送请求:如何发送授权请求

string xml =“SomeXML Data”;

string url = @"http://someserver.com"; 

WebRequest request = WebRequest.Create(url); 
request.Method = "Post"; 
request.ContentType = "text/xml"; 

//The encoding might have to be chaged based on requirement 
UTF8Encoding encoder = new UTF8Encoding(); 
byte[] data = encoder.GetBytes(xml); //postbody is plain string of xml 
request.ContentLength = data.Length; 
Stream reqStream = request.GetRequestStream(); 
reqStream.Write(data, 0, data.Length); 
reqStream.Close(); 
System.Net.WebResponse response = request.GetResponse(); 
System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream()); 
string str = reader.ReadToEnd(); 

但这代码抛出错误:

远程服务器返回一个错误:(401)未经授权。

我知道用户/通过自动化时IE浏览器问我。

任何人都可以帮助我如何发送授权请求? 谢谢!

回答

1
webClient.Credentials = new NetworkCredential("Login", "Password"); 
0

服务器似乎使用Windows身份验证 - 虽然我只是猜测。如果是这样,请加上这一行:

request.Credentials = CredentialCache.DefaultCredentials; 
+0

你怎么知道它是Windows身份验证? – Andrey 2010-11-11 17:56:16

+0

我不知道。正如我所说,我猜测...但很可能。 – Aliostad 2010-11-11 18:31:55

+0

伙计webClient.Credentials = new NetworkCredential(“Login”,“Password”); 工程,但只有当我调试和一些时间传递,如果我运行的页面没有调试器,远程服务器抛出错误:远程服务器返回错误:(400)错误的请求。 – ihorko 2010-11-11 18:38:55

0

看起来像服务器正在使用Windows集成安全性?

尝试这样的事情

WebRequest req = WebRequest.Create(tokenUri); 
req.AuthenticationLevel = System.Net.Security.AuthenticationLevel.MutualAuthRequested; 
req.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;