2013-05-14 35 views
9

Próbuję wykonać żądanie webowe z adresu URL https z podstawowym uwierzytelnieniem. I nie działa! poniżej jest mój kod, to faktycznie działa, jeśli używam niezabezpieczonego adresu URL w stosunku do bezpiecznego i nie wiem, co robię źle. Dzieje się tak tylko z niezabezpieczonymi, ale gdy używany jest bezpieczny adres URL, pojawia się 401 błąd autorów. Czy to może być ktoś źle skonfigurowany na serwerze, czy może to mój kod?C# - żądanie HTTP z https i podstawowym uwierzytelnieniem

Czy ktoś mógłby mi pomóc?

 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

dobrze kod wydaje się dobrze do uwierzytelniania, ale naprawdę nie mogę powiedzieć niczego, dopóki nie zobaczę URL. –

+0

Możesz wypełnić poświadczenia bezpiecznego połączenia. http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.credentials.aspx – JuStDaN

+1

Dzięki za sugestie facetów. Wygląda na to, że mój kod był w porządku. Mają coś nie tak na serwerze, które naprawili! – user1096865

Odpowiedz

11

Działa to dla mnie:

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, to nie działa – Cheese

+0

@ Co to jest komunikat o błędzie z wykonaniem? –

+0

@Cheese To działało dla mnie, jednak musiałem dodać webRequest.ContentLength = 0, ponieważ nie było bez niego bez niego, mimo że zawartość ciała wynosiła 0. – John