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 !