Quelqu'un m'aide à obtenir le JSON du site gitlab. J'ai écrit mon code mais quand je compile le code je reçois l'exception The remote server returned an error: (401) Unauthorized.
dans mon application de console (C#).C# comment obtenir la chaîne JSON en utilisant HttpWebRequest
Dans mon navigateur, je cours la même URL quand j'ai signé dans le navigateur, je peux obtenir la chaîne JSON. Si je cours la même URL après la déconnexion du navigateur, j'obtiens le message {"message":"401 Unauthorized"}
dans mon navigateur.
En raison de cette même exception, je pense que je n'ai pas passé le nom d'utilisateur et les informations d'identification dans mon HttpWebRequest
.
je faire l'exception dans la ligne HttpWebResponse response = request.GetResponse() as HttpWebResponse;
Mon code:
string URL = "http://gitlab.company.com/api/v3/users?per_page=100&page=1";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(URL);
request.ContentType = "application/json; charset=utf-8";
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes("userName:passWord"));
request.PreAuthenticate = true;
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
Console.WriteLine(reader.ReadToEnd());
}
Ma question:
- quoi et où ai-je fait une erreur?
- Je sais que je dois utiliser le verbe GET pour obtenir les données dans l'API, mais je ne sais pas où je dois utiliser le verbe GET?
Merci d'avance.
Je pense que lorsque vous utilisez "request.Headers", il n'est pas nécessaire de définir "request.PreAuthenticate = true;". Au moins, comment cela fonctionne dans mon code (pas pour gitlab mais un autre serveur). (Mais j'utilise "request.Headers.Add"). Et vous code devrait contenir "request.Method =" GET ";" – Julo
Commencez par lire le message d'erreur: non autorisé. Cela signifie que vous avez utilisé les fausses informations d'identification. Pourquoi n'utilisez-vous pas la propriété 'Credentials' comme indiqué ici [Comment utiliser la propriété HttpWebRequest.Credentials pour l'authentification de base?] (Http://stackoverflow.com/questions/19764113/how-to-use-httpwebrequest-credentials- property-for-basic-authentication) –
Aussi, pourquoi utilisez-vous HttpWebRequest au lieu de HttpClient par exemple? Toutes ces lignes pourraient être réduites à 3-4 –