1. #1
    Nouveau membre du Club Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 61
    Points : 39
    Points
    39

    Par défaut Creer une requête curl avec C#

    Bonjour bonjour,

    Comme dit dans le titre je cherche à transformer une requête curl en C#.
    J'ai lu pas mal de forum sur ce sujet et ils expliquaient qu'il fallait passer par HttpClient.
    J'ai beau essayé de l'utiliser,ca ne donne pas du tout le résultat escompté.

    voila la requête curl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    curl -X POST 'http://api.devicewise.com/rest/auth' \
    --data-urlencode 'username=username@example.com'  \
    --data-urlencode 'password=password'
    elle doit me retourner une clé de session

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    {
      "auth" : {
        "success" : true,
        "params": {
          "orgKey": "SYSTEM",
          "sessionId": "52z115a7f800000b"
        }
      }
    }
    et voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    using Newtonsoft.Json;
    using System;
    using System.IO;
    using System.Linq;
    using System.Net;
    using System.Net.Http;
    using System.Net.Http.Headers;
    using System.Text;
    using System.Threading.Tasks;
     
    namespace HttpClientSample
    {
     
     
        public class Params
        {
            public string username { get; set; }
            public string password { get; set; }
        }
     
        class Program
        {
            static HttpClient client = new HttpClient();
     
            static async Task<Uri> CreateAuthAsync(Params para)
            {
     
                HttpResponseMessage response = await client.PostAsJsonAsync("rest/auth",para);
                response.EnsureSuccessStatusCode();
                Console.WriteLine("status de la requete : " + response.StatusCode);
                Console.WriteLine(response.RequestMessage);
     
                return response.Headers.Location; 
            }
     
            static void Main()
            {
                RunAsync().Wait();
            }
     
            static async Task RunAsync()
            {
                client.BaseAddress = new Uri("https://api.devicewise.com/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
     
                try
                {
     
                    Params para = new Params { username = "username", password = "password" };
                    var url = await CreateAuthAsync(para);
                    Console.WriteLine("url entier : "+url+" : fin de l'url");
                    Console.WriteLine(url.PathAndQuery);
     
                }
     
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
     
                Console.ReadLine();
            }
     
        }
    }
    J'obtiens : 401 -> unauthorized

    Si quelqu'un pouvait m'aiguiller, je lui en saurai trés reconnaissant.

  2. #2
    Nouveau membre du Club Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 61
    Points : 39
    Points
    39

    Par défaut

    Personne pour m'aider ? :3

  3. #3
    Rédacteur/Modérateur

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 456
    Points : 4 874
    Points
    4 874
    Billets dans le blog
    5

    Par défaut

    Bonjour,

    A première vue, cela ne marche pas car les requêtes ne sont pas équivalentes.

    Avec CURL, tu envoies des données comme un formulaire le ferait, c'est à dire urlencoded.
    Avec ton code, tu envoies les données en JSON.

    Peut-être que le webservice supporte les deux formats, mais si ce n'est pas le cas, l'erreur vient très certainement de là !

    Pour envoyer des données urlencoded, je ferai plutôt quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    static async Task<Uri> CreateAuthAsync(Params para)
    {
       FormUrlEncodedContent urlEncodedParams = new FormUrlEncodedContent(new KeyValuePair<string, string>[]
       {
           new KeyValuePair<string, string>("username", para.username), 
           new KeyValuePair<string, string>("password", para.password) 
       });
       HttpResponseMessage response = await client.PostAsync("rest/auth", urlEncodedParams);
       response.EnsureSuccessStatusCode();
       Console.WriteLine("status de la requete : " + response.StatusCode);
       Console.WriteLine(response.RequestMessage);
     
       return response.Headers.Location; 
    }
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  4. #4
    Nouveau membre du Club Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 61
    Points : 39
    Points
    39

    Par défaut

    Merci beaucoup de ta réponse !

    Je test ca cet aprem

  5. #5
    Nouveau membre du Club Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 61
    Points : 39
    Points
    39

    Par défaut

    Après test ca me retourne la même erreur :

    Le code d'état de réponse n'indique pas la réussite : 401 <Unauthorized>
    Lorsque je fais la commande curl parcontre j'obtiens bien une sessionId, donc mon login/password est le bon.
    Dans la doc ( http://help.devicewise.com/display/M...HTTP+Interface ) ils parlent du protocol Tr50, est-ce que ca peut être lié au fait que la requête ne marche pas ?

  6. #6
    Rédacteur/Modérateur

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 456
    Points : 4 874
    Points
    4 874
    Billets dans le blog
    5

    Par défaut

    Et avec le petit détail qui tue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     HttpResponseMessage response = await client.PostAsync("/rest/auth", urlEncodedParams);
    est-ce que cela change quelque chose ?
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  7. #7
    Nouveau membre du Club Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 61
    Points : 39
    Points
    39

    Par défaut

    Hélas, ca donne la même erreur.
    Je sais pas comment m'en dépatouiller de tout ca :/

  8. #8
    Rédacteur/Modérateur

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    juillet 2016
    Messages
    1 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juillet 2016
    Messages : 1 456
    Points : 4 874
    Points
    4 874
    Billets dans le blog
    5

    Par défaut

    Maintenant, pour déboguer, je ne vois que l'accès à la requête, pour vérifier sa forme. Car il ne doit pas y avoir grand chose de différent entre la requête envoyé par CURL et ton code C#. Tu peux utiliser un outil comme WireShark par exemple.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  9. #9
    Nouveau membre du Club Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 61
    Points : 39
    Points
    39

    Par défaut

    Oki d'oki je vais faire ça, merci de l'aide

  10. #10
    Nouveau membre du Club Avatar de A2ll_
    Homme Profil pro
    Étudiant
    Inscrit en
    mai 2017
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : mai 2017
    Messages : 61
    Points : 39
    Points
    39

    Par défaut

    Et si j'utilisais POST, ca ferait la même erreur ? (je dis ca car je n'arrive pas a trouver la requete sur wireshark : je trouve que la trace CONNECT et ca ne me donne pas l'url complète :/ )
    Si c'est possible, je devrais changer quoi ?

    la requête de base ressemble a ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    {
      "auth" : {
        "command" : "api.authenticate",
        "params" : {
          "username": "username@example.com",
          "password": "password"
        }
      }
    }

Discussions similaires

  1. [AC-2003] creer une requête en VBA avec des variables
    Par qung88 dans le forum VBA Access
    Réponses: 14
    Dernier message: 23/02/2011, 16h19
  2. concaténer une requête sql avec condition
    Par maliak dans le forum PHP & MySQL
    Réponses: 6
    Dernier message: 10/02/2006, 13h01
  3. Une requête SQl avec concaténation
    Par Bobybx dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/01/2006, 11h18
  4. Creer une requéte access pour choisir des textes word
    Par mariekero dans le forum Access
    Réponses: 1
    Dernier message: 16/01/2006, 11h25
  5. Déterminer une requête paramétrée avec LIKE
    Par priest69 dans le forum Access
    Réponses: 4
    Dernier message: 24/10/2005, 20h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo