Modifica: volevo tornare a notare che il problema non era affatto la mia fine, ma piuttosto con il codice sul lato della società.Webclient/HttpWebRequest con autenticazione di base restituisce 404 non trovato per URL valido
Sto tentando di aprire una pagina utilizzando l'autenticazione di base. Continuo a ricevere un errore 404 Page non trovato. Posso copiare e incollare il mio url nel browser e funziona bene (se non sono loggato nel loro sito già compare una finestra di credenziali, altrimenti apre quello che voglio che apra). Devo essere nel posto giusto e autenticare, perché ottengo un 401 (errore non autenticato) se inserisco intenzionalmente un nome utente/password errato e ottengo un errore interno del server 500 se lo passo con un parametro errato nella stringa di query . Ho provato a utilizzare Webclient e HttpWebRequest che portano entrambi allo stesso errore 404 non trovato.
Con Webclient:
string url = "MyValidURLwithQueryString";
WebClient client = new WebClient();
String userName = "myusername";
String passWord = "mypassword";
string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(userName + ":" + passWord));
client.Headers[HttpRequestHeader.Authorization] = "Basic " + credentials;
var result = client.DownloadString(url);
Response.Write(result);
Con HttpWebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("MyValidURL");
string authInfo = "username:password";
authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
request.Headers.Add("Authorization", "Basic " + authInfo);
request.Credentials = new NetworkCredential("username", "password");
request.Method = WebRequestMethods.Http.Get;
request.AllowAutoRedirect = true;
request.Proxy = null;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream stream = response.GetResponseStream();
StreamReader streamreader = new StreamReader(stream);
string s = streamreader.ReadToEnd();
Response.Write(s);
Utilizzando [Fiddler] (http://fiddler2.com/), accedere al sito tramite il browser e vedere quali intestazioni/corpo invia il browser. A mio avviso, dovresti anche impostare 'UserAgent' – I4V
Le informazioni dell'intestazione sono corrette nel fiddler e ho anche provato a impostare UserAgent a un punto di un post precedente che avevo visto che suggeriva la stessa cosa. –
Il 404 non proviene da WebClient - è dal server. C'è qualcosa che il server non apprezza dal tuo programma, che gli piace dal browser. Usa Fiddler per rendere il tuo WebClient aspetto _exactly_ come il browser. –