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

C# Discussion :

Problème lors d'un encodage d'un fichier binaire dans une requête XML


Sujet :

C#

  1. #1
    Membre régulier Avatar de Coudrak
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 66
    Points : 90
    Points
    90
    Par défaut Problème lors d'un encodage d'un fichier binaire dans une requête XML
    Je cherche à envoyer une requête XML (en HTTP, comme valeur d'une propriété que j'ai appelée "request", en méthode POST) à un serveur JAVA, requête qui a la particularité de contenir une balise <data> contenant un fichier ZIP. Lorsque je le fais à partir de Java, cela fonctionne.
    La même requête, envoyée cette fois par un programme en C#, donne à la réception (côté serveur Java) une requête légèrement différent et en tout cas le fichier n'arrive à pas être dézippé.

    La différence visible (en debug, à la réception de la requête côté Java) est que les + sont remplacés par un espace.

    Alors que les + sont bien présents quand la requête est envoyée par un programme de test en Java.

    Je pense à un problème lié au ContentType mais a priori seul "application/x-www-form-urlencoded" semble la bonne manière.

    Voici la façon dont j'envoie la requête, y voyez-vous un souci ?

    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
                HttpWebRequest objHttpWebRequest;
                HttpWebResponse objHttpWebResponse = null;
                Stream objResponseStream = null;
                Stream objRequestStream = null;
                XmlTextReader objXMLReader;
     
                objHttpWebRequest = (HttpWebRequest)WebRequest.Create(v_strURL);
     
                try
                {                            
                    byte[] bytes = Encoding.ASCII.GetBytes("request=" + v_objXMLDoc.OuterXml);
                    objHttpWebRequest.Method = "POST";
                    objHttpWebRequest.ContentType = "application/x-www-form-urlencoded";                
                    objHttpWebRequest.ContentLength = bytes.Length;
     
                    objRequestStream = objHttpWebRequest.GetRequestStream();                
                    objRequestStream.Write(bytes, 0, bytes.Length);
                    objRequestStream.Close();
     
                    objHttpWebResponse = (HttpWebResponse)objHttpWebRequest.GetResponse();

    Sachant que ma requête (dans v_objXMLDoc.OuterXml) ressemble à quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="ISO-8859-1"?><action prop="a"><data>UEsDBBQAAgAIAI+GcDzHDsOyVQ0AAFxdAAAIAAAAY29uZi5pbmmVXF1v20YWfQ/g/xD0cVG0vMPRV7FagJHomK0sqfqwGxiFwNpMzEYWVYoKmv1Hed+3ffQf26EkSuTMnXtngSKleY7mHF3OHA7JER+Gefolyad59jFdJ79fvZkXcV4s0pek73s/gvgRur3eW6/3k+ep/67ehJsnHYRuBZZtpZtPg2xX9OF7r3P15j7LP1d7Ot+3FCXdFfHmMVlu0qL/+eXqzThWrY2z/Zck3r/98vrtOX3cr5O3/1CfTZ+Su0T9vU76qvFRtvlU+/MmST89F+XW/Xn</data></action>
    Je vous passe l'encodage du fichier ZIP en StringBase64 car puisque la requête est la même qu'en Java (mon programme qui marche) je ne pense pas que le problème vienne à la base du contenu de la balise <data> mais plutôt de la façon d'envoyer qui ferait perdre des données, en tout cas les + !

    Toute piste ou idée est la bienvenue, n'ayant jamais touché à ce genre de choses auparavant !

    Merci !

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Je sais pas trop à quel niveau se produit le remplacement, c'est assez bizarre... Mais tu pourrais, à l'arrivée côté, remplacer les espaces par des + dans le champ <data>

  3. #3
    Membre régulier Avatar de Coudrak
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 66
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je sais pas trop à quel niveau se produit le remplacement, c'est assez bizarre... Mais tu pourrais, à l'arrivée côté, remplacer les espaces par des + dans le champ <data>
    Oui ça fonctionne effectivement, en remplaçant tous les espaces par des +, le décodage donne alors un ZIP correcte.
    Mais je ne comprends pas pourquoi le même envoi, en Java, garde les +. Y aurait-t-il une sorte option dans .NET dans la transmission des requêtes qui dirait "convertir les + par des espaces"...
    Ou côté Apache "si on m'envoie une requête HTTP avec .NET, remplacer les +"...
    Je penche du côté des options du serveur, je me souviens qu'en PHP dans le .INI il y avait quelque chose de ce genre (décodage automatique)... je vais encore investiguer...

  4. #4
    Membre régulier Avatar de Coudrak
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 66
    Points : 90
    Points
    90
    Par défaut
    Résolu, il fallait ajouter HttpUtility.UrlEncode()

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Je me permet de deterrer ce sujet,

    J'ai le meme problème, tu disais :

    Citation Envoyé par Coudrak Voir le message
    Résolu, il fallait ajouter HttpUtility.UrlEncode()
    J'ai juste une question : ou ?

    Sur ta string "v_objXMLDoc.OuterXml" ?
    Dans le contenu des balise de ton xml ?
    ou carrement sur toute la string ""request=" + v_objXMLDoc.OuterXml" ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lenteur lors de l'intégration d'un fichier CSV dans une base SQL
    Par MarcOliver dans le forum Administration
    Réponses: 0
    Dernier message: 14/10/2014, 15h25
  2. Réponses: 2
    Dernier message: 18/03/2013, 20h40
  3. Lire fichier binaire dans une classe
    Par olibara dans le forum C#
    Réponses: 4
    Dernier message: 10/02/2013, 20h07
  4. Récupérer un fichier posté dans une requête POST
    Par monstor dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 14/09/2011, 18h52
  5. Réponses: 3
    Dernier message: 19/02/2007, 23h01

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