IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langages Discussion :

envoi d'une commande HTTP Get avec XML


Sujet :

Langages

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut envoi d'une commande HTTP Get avec XML
    Bonjour,

    J'essai d'envoyer une commande put avec XML mais je reçois une exception : erreur non autorisé . en effet, il me semble que j'envoie mal mon XML.

    Mon code est le suivant:

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    using System.IO;
    using System.Net;
     
    namespace WindowsFormsApplication1
    {
        class Program
        {
            /// <summary>
            /// The main entry point for the application.
            /// </summary>
            [STAThread]
            static void Main()
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                //ReponseXML(url, xmlText,method);
                string url2 = "http://1.8.2.1:80/ISAPI/System/IO/outputs/1/trigger";
                string method2 = "put";
                string xmlText2= File.ReadAllText(@"file1.xml");
                ReponseXML(url2, xmlText2, method2);
                Application.Run(new Form1());
     
            }
            public static string ReponseXML(string destinationUrl, string requestXml, string method)
            {
                try
                {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(destinationUrl);
                    request.Credentials = new NetworkCredential("admin", "1234");
                    byte[] bytes;
                    bytes = System.Text.Encoding.ASCII.GetBytes(requestXml);
                    request.ContentType = "text/xml; encoding='utf-8'";
                    request.Accept = "text/xml";
                    request.ContentLength = bytes.Length;
                    if (method == "get")
                    {
                        request.Method = "GET";
                    }
                    else
                    if (method == "post")
                    {
                        request.Method = "POST";
                    }
                    else
                    if (method == "delete")
                    {
                        request.Method = "DELETE";
                    }
                    else
                    if (method == "put")
                    {
                        request.Method = "PUT";
                    }
                    else
                    {
                        throw new Exception("Invalid Method Type");
                    }
     
                    request.Timeout = -1;
                    //request.AuthenticationLevel = 0;
     
                    Stream requestStream = request.GetRequestStream();
                    requestStream.Write(bytes, 0, bytes.Length);
     
                    HttpWebResponse response;
     
                    response = (HttpWebResponse)request.GetResponse();
                    if (response.StatusCode == HttpStatusCode.OK)
                    {
                        Stream responseStream = response.GetResponseStream();
                        string responseStr = new StreamReader(responseStream).ReadToEnd();
                        MessageBox.Show(responseStr);
                        return responseStr;
     
                    }
                    else
                    {
                        MessageBox.Show("statut ko");
                    }
                    requestStream.Close();
                }
                catch (WebException e)
                {
                    throw e;
                }
                return null;
            }
     
        }
    }
    Mon fichier Xml est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <IOPortData xmlns=“http://www.isapi.org/ver20/XMLSchema”>  
      <outputState value="high"/outputState> 
    </IOPortData>
    Pourriez-vous m'aider s'il vous plaît.

    Bien cordialement,

  2. #2
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Salut,

    et en POST tu n'as pas de souci, nop ?
    Pour passer ton XML via GET essaie de le transformer en Base64 dans un premier temps, ptèt ça marchera mieux.
    Plus je connais de langages, plus j'aime le C.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Je ne pense pas qu'il soit un problème d'encryptage.
    Désolé le GET marche bien sans XML. Le post ne marche pas du tout et j'ai une erreur :non autorisé 401. Le problème est au niveau de la réponse de http.
    c'est à dire à ce niveau là:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     response = (HttpWebResponse)request.GetResponse();
    Je ne sais pas c'est quoi le problème.

  4. #4
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    Re,

    encryptage ? Tu veux dire encodage je suppose. Quand ton code sera fonctionnel on en reparlera. Bon y'a 2-3 trucs qui me chiffonent dans ton code, mais rien à voir avec ton souci : une 401 c'est simplement que tu n'as pas les droits d'accès à cette ressource. Deux possibilités : tes credentials sont mauvais, tu n'utilises pas la bonne méthode d'authentification.
    Plus je connais de langages, plus j'aime le C.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2016
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2016
    Messages : 132
    Points : 59
    Points
    59
    Par défaut
    Re,

    Oui, encodage.

    J'utilise cette méthode pour m'authentifier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    request.Credentials = new NetworkCredential("admin", "1234");
    J'arrive bien à faire la requête http et donc à me connecter.

    Par contre , j'ai toujours un problème au niveau de la réponse: 401: interdit. à priori , je ne suis pas autorisé pour faire ce post. (c'est bizarre, je pense que j'arrive bien m'authentifier??!!)

    Merci de ton aide!

  6. #6
    Membre expert Avatar de jopopmk
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    1 856
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2011
    Messages : 1 856
    Points : 3 570
    Points
    3 570
    Par défaut
    La seule chose dont tu peux être sûr c'est que tu as bien un serveur HTTP derrière l'IP 1.8.2.1 pour le port 80 (pas besoin de le préciser d'ailleurs, c'est le port HTTP par défaut).
    Un truc pour savoir la méthode de connexion c'est de regarder les entêtes HTTP de la réponse, tu devrais y trouver quelques info (mode Basic ou NTLM).
    Il reste la possibilité que le serveur soit uniquement accessible avec HTTPS (port 443 par défaut).
    Plus je connais de langages, plus j'aime le C.

  7. #7
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <IOPortData xmlns=“http://www.isapi.org/ver20/XMLSchema”>  
      <outputState value="high"/outputState> 
    </IOPortData>
    Si ton XML correspond bien à cela, alors il est mal formé. Le tag "outputState" n'est pas fermé. Il manque le < entre "high" et /ouputState

    Peut être le problème vient-il de là...
    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

Discussions similaires

  1. [2.x] Envoi d'une requête SOAP/wsdl avec données XML
    Par Mouke dans le forum Symfony
    Réponses: 0
    Dernier message: 05/02/2016, 13h00
  2. Envoi d'une commande reseau
    Par nicolas_cs2i dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/02/2007, 23h40
  3. executer une commande non perl avec perl
    Par kolombo dans le forum Langage
    Réponses: 17
    Dernier message: 07/08/2006, 11h28
  4. Un http get avec le shell...
    Par kitov dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 11/02/2006, 12h34
  5. Parser une requête HTTP/GET en c ! regex ?
    Par canard75 dans le forum C
    Réponses: 14
    Dernier message: 06/12/2005, 10h08

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