Лучший отвечающий
Сохранение pdf полученного с помощью webrequest

Вопрос
-
var request = WebRequest.Create(@"http://10..../print.php"); request.Method = "POST"; request.Timeout = 120000; request.ContentType = "application/x-www-form-urlencoded"; byte[] sentData = Encoding.UTF8.GetBytes("xml_data=<?xml version=\"1.0\"?><printListStick><wblnum>13-6581-2613</wblnum><item></item><type>2</type></printListStick>"); request.ContentLength = sentData.Length; var sendStream = request.GetRequestStream(); sendStream.Write(sentData, 0, sentData.Length); sendStream.Close(); var response = request.GetResponse(); var stream = response.GetResponseStream(); var array = new byte[response.ContentLength]; stream.Read(array, 0, array.Length); response.Close(); FileStream file = new FileStream(@"D:\E388692D-8C0C-4710-86DB-E77E0B2CB2CE.pdf", FileMode.Create); file.Write(array, 0, array.Length); file.Close();
Делаю веб запрос в ответ которого формируется PDF-файл, который я записываю на диск. Файл почему-то не открывается Адобом, сообщение, что он испорчен. Хотя, если я тот же запрос делаю в браузере и сохраняю из него файл, то он полностью совпадает по размеру с файлом получаемым программно и нормально открывается.
В чем может быть проблема?
15 мая 2014 г. 13:25
Ответы
-
Проблема однозначно в байтах, неверно они интерпретируются. Нужно точно знать, что возвращает веб-ресурс, если бинарные данные файла пишутся прямо в поток ответа, то можно сделать попроще. Использовать класс System.Net.WebClient, его метод DownloadFile.
Сделаем содержимое сообщества лучше, вместе!
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 20 мая 2014 г. 11:21
15 мая 2014 г. 14:08Модератор -
"как мне POST запрос сделать в этом случае..." - в этом уже никак.
Сделаем содержимое сообщества лучше, вместе!
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 20 мая 2014 г. 11:20
16 мая 2014 г. 8:20Модератор
Все ответы
-
Проблема однозначно в байтах, неверно они интерпретируются. Нужно точно знать, что возвращает веб-ресурс, если бинарные данные файла пишутся прямо в поток ответа, то можно сделать попроще. Использовать класс System.Net.WebClient, его метод DownloadFile.
Сделаем содержимое сообщества лучше, вместе!
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 20 мая 2014 г. 11:21
15 мая 2014 г. 14:08Модератор -
Спасибо, мысль хорошая, но я не понимаю, как мне POST запрос сделать в этом случае...15 мая 2014 г. 15:34
-
Добрый день, проверьте Content-Encoding.
Приведу часть кода для HttpWebResponse
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { if (response.StatusCode == HttpStatusCode.OK) { cookieContainer = request.CookieContainer; if (response.Headers.Get("Content-Encoding") != null && response.Headers.Get("Content-Encoding").ToLower() == "gzip") { using (StreamReader sr = new StreamReader(new GZipStream(response.GetResponseStream(), CompressionMode.Decompress))) { respstr = sr.ReadToEnd(); } } else { using (StreamReader sr = new StreamReader(response.GetResponseStream())) { respstr = sr.ReadToEnd(); } } } }
Реализация немного другая, но принцип один - проверьте на gzip сжатие.
- Предложено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 20 мая 2014 г. 11:21
15 мая 2014 г. 23:16 -
"как мне POST запрос сделать в этом случае..." - в этом уже никак.
Сделаем содержимое сообщества лучше, вместе!
- Помечено в качестве ответа Maksim MarinovMicrosoft contingent staff, Moderator 20 мая 2014 г. 11:20
16 мая 2014 г. 8:20Модератор