2013-05-14 135 views
9

我正在尝试使用基本身份验证通过https url执行webrequest。它不工作! 下面是我的代码,它实际上工作,如果我使用一个非安全的网址vs安全的,我不知道我做错了什么。工作只是找到不安全的,但是当一个安全的网址被使用,我得到一个401用户身份验证错误。它可能是某人在服务器上设置错误,或者它是我的代码?c# - 使用https和基本身份验证的http web请求

有人可以帮助我吗?

 var req = System.Net.HttpWebRequest.Create(Url) as HttpWebRequest; 
     req.Method = Method.ToString(); 
     req.ContentType = "application/json"; 
     req.Date = RequestTime; 
     req.Proxy = null; 
     string credentials = String.Format("{0}:{1}", "xxxx", "xxxx"); 
     byte[] bytes = Encoding.ASCII.GetBytes(credentials); 
     string base64 = Convert.ToBase64String(bytes); 
     string authorization = String.Concat("Basic ", base64); 
     req.Headers.Add("Authorization", authorization); 
     HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
    Stream receiveStream = response.GetResponseStream(); 

     StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8); 
     string responsebody = readStream.ReadToEnd(); 
     Console.WriteLine(responsebody); 

     response.Close(); 
     readStream.Close(); 
+0

很好的代码似乎罚款进行身份验证,但直到我看到了网址实在说不出什么。 – 2013-05-14 01:21:55

+0

您可能需要填充安全连接的凭据。 http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.credentials.aspx – JuStDaN 2013-05-14 04:32:24

+1

感谢您的建议家伙。看起来我的代码很好。他们在服务器上设置了错误,他们最终修复了这些错误! – user1096865 2013-05-20 18:00:58

回答

11

这个工作对我来说:

var webRequest = (HttpWebRequest)WebRequest.Create(url); 
webRequest.Method = "GET"; 
webRequest.ContentType = "application/json"; 
webRequest.UserAgent = "Mozilla/5.0 (Windows NT 5.1; rv:28.0) Gecko/20100101 Firefox/28.0"; 
webRequest.ContentLength = 0; // added per comment 
string autorization = "username" + ":" + "Password"; 
byte[] binaryAuthorization = System.Text.Encoding.UTF8.GetBytes(autorization); 
autorization = Convert.ToBase64String(binaryAuthorization); 
autorization = "Basic " + autorization; 
webRequest.Headers.Add("AUTHORIZATION", autorization); 
var webResponse = (HttpWebResponse)webRequest.GetResponse(); 
if (webResponse.StatusCode != HttpStatusCode.OK) Console.WriteLine("{0}",webResponse.Headers); 
using (StreamReader reader = new StreamReader(webResponse.GetResponseStream())) 
{ 
    string s = reader.ReadToEnd(); 
    Console.WriteLine(s); 
    reader.Close(); 
} 
+0

nop,这不起作用 – Cheese 2015-09-16 16:07:04

+0

@Cheese什么是您的执行错误信息? – 2015-10-06 20:26:45

+0

@Cheese这对我有用,但是我不得不添加webRequest.ContentLength = 0,因为即使主体内容为0,它也不开心。 – John 2015-11-09 14:57:45