2013-05-14 6 views
9

Sto cercando di eseguire una richiesta web su un URL https con autenticazione di base. E non funziona! di seguito è il mio codice, in realtà funziona se uso un url non sicuro vs quello sicuro, e non riesco a capire cosa sto facendo male. Funziona solo con sicurezza, ma quando viene utilizzato un url sicuro, ottengo un errore di autenticazione utente 401. Potrebbe essere qualcuno impostato errato sul server, o è il mio codice?C# - richiesta Web http con https e autenticazione di base

Qualcuno potrebbe aiutarmi?

 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

bene il codice sembra che vada bene per l'autenticazione, ma in realtà non può dire nulla fino a quando non vedo l'url. –

+0

È possibile popolare le credenziali per la connessione protetta. http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.credentials.aspx – JuStDaN

+1

Grazie per i suggerimenti ragazzi. Sembra che il mio codice andasse bene. Avevano qualcosa di sbagliato sul server, che alla fine aggiustarono! – user1096865

risposta

11

questo funziona per me:

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, questo non funziona – Cheese

+0

@Cheese Qual è il messaggio di errore con la tua esecuzione? –

+0

@Cheese Questo ha funzionato per me, tuttavia ho dovuto aggiungere webRequest.ContentLength = 0 perché non era felice senza di esso anche se il contenuto del corpo era 0. – John