Comment compresser un POST HttpWebRequest
Je suis en train de publier des données à un serveur qui accepte les données compressées. Le code ci-dessous fonctionne très bien, mais il n'est pas compressé. Je n'ai pas travaillé avec la compression ou Gzip beofre, de sorte que toute aide est appriciated.
HttpWebRequest request = WebRequest.Create(uri) as HttpWebRequest;
request.Timeout = 600000;
request.Method = verb; //POST
request.Accept = "text/xml";
if (!string.IsNullOrEmpty(data))
{
request.ContentType = "text/xml";
byte[] byteData = UTF8Encoding.UTF8.GetBytes(data);
request.ContentLength = byteData.Length;
//Here is where I need to compress the above byte array using GZipStream
using (Stream postStream = request.GetRequestStream())
{
postStream.Write(byteData, 0, byteData.Length);
}
}
XmlDocument xmlDoc = new XmlDocument();
HttpWebResponse response = null;
StreamReader reader = null;
try
{
response = request.GetResponse() as HttpWebResponse;
reader = new StreamReader(response.GetResponseStream());
xmlDoc.LoadXml(reader.ReadToEnd());
}
Dois-je gzip l'ensemble du tableau d'octets? Ai-je besoin d'ajouter d'autres en-têtes ou de supprimer celui qui est déjà là?
Merci!
-Scott
source d'informationauteur Scott
Vous devez vous connecter pour publier un commentaire.
Pour répondre à la question que vous avez demandé, pour publier des données compressées, tout ce que vous devez faire est de conclure la demande ruisseau avec gzip flux
C'est complètement différent que la demande d'un gzip réponse, qui est beaucoup plus fréquent.
Dans
Page_Load
événement:Et pour la prise de comprimé demandes:
HttpWebRequest et GZip Réponses Http par Rick Strahl
J'ai aussi reçu le message "Impossible de fermer le flux jusqu'à ce que tous les octets sont écrits" erreur à l'aide de code similaire à tnyfst. Le problème est que j'ai eu:
où binData est mes données brutes avant la compression. Évidemment, la longueur du contenu compressé serait différent, donc j'ai supprimé cette ligne et a terminé avec ce code:
Essayer cette méthode d'extension.
Le flux sera laissée ouverte (voir la GZipStream constructeur).
Le flux de position est réglée à 0 après la compression est effectuée.
Vous pouvez utiliser le test suivant:
Pour plus d'informations, voir: http://msdn.microsoft.com/en-us/library/hh158301(v=vs. 110).aspx