Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/12: Рейтинг темы: голосов - 12, средняя оценка - 4.50
pini3n
1 / 1 / 0
Регистрация: 09.02.2010
Сообщений: 9
1

Как принимать ответ с кодировкой chunked

01.05.2010, 21:20. Просмотров 2376. Ответов 1
Метки нет (Все метки)

Картинка приходит с сервера со следующими хэдэрами:
HTML5
1
2
3
4
5
6
7
8
(Status-Line)   HTTP/1.1 200 OK
Date    Sat, 01 May 2010 16:46:37 GMT
Server  Apache
P3P CP="ONL UNI COM PHY NAV INT DEM CURo OUR"
Keep-Alive  timeout=6, max=50
Connection  Keep-Alive
Transfer-Encoding   chunked
Content-Type    image/jpeg
Из за "Transfer-Encodin chunked" я не могу забайтировать ответ...
делаю стандартно:
C#
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
using (BinaryReader br = new BinaryReader(xxWebResponse.GetResponseStream(), Encoding.Default))
                                {
                                    byte[] ba = new byte[32768];
                                    int pos = 0;
                                    byte b;
                                    while (true)
                                    {
                                        try
                                        { b = br.ReadByte(); }
                                        catch (EndOfStreamException ex)
                                        {
                                            break;
                                        }
                                        ba[pos] = b;
                                        pos++;
                                    }
                                    byte[] ba2 = new byte[pos];
                                    for (int k = 0; k < pos; k++)
                                    {
                                        ba2[k] = ba[k];
                                    }
                                    sFileContent = Encoding.Default.GetString(ba2);
                                    br.Close();
                                }
                                capRes.Close();
В переменной sFileContent получаются крякозябы... =\
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2010, 21:20
Ответы с готовыми решениями:

Получить ответ compressed/chunked на POST запрос
Приветствую. Мне нужно в цикле узнавать ответ на POST запрос, и в зависимости от этого ответа...

С кодировкой базы данных и кодировкой сайтом и кодировкой файла разобраться не могу
С кодировкой базы данных и сайтом файлом разобраться не могу. Я на своем сайте вывожу данные из...

Обработка chunked ответов
Как можно корректно обработать chunked ответ? Дело в том что туда вставляются как я понял длины...

как принимать сообщение в сокетах
здравствуйте, суть проблемы в следующем: пишу оболочку для стандартной функции recv в сокетах....

Как принимать данные с Bluetooth - устройства?
Здравствуйте. Допустим у меня есть bluetooth USB адаптер, через который у меня подключено...

1
IICuX
85 / 85 / 26
Регистрация: 04.01.2010
Сообщений: 270
02.05.2010, 14:53 2
http://en.wikipedia.org/wiki/Chunked_transfer_encoding

C#
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
    class ChunkedStream : Stream
    {
        private readonly Stream innerStream;
 
        internal ChunkedStream(Stream innerStream)
        {
            if (!innerStream.CanRead)
                throw new ArgumentException();
            this.innerStream = innerStream;
        }
 
 
        int currentChunk = -1;
 
        int currentChunkReaded;
 
        public override int Read(byte[] buffer, int offset, int count)
        {
            if (currentChunk == 0)
                return 0;
            
            if (currentChunk == -1 || currentChunk == currentChunkReaded)
                ReadNextChunkDeclaration();
 
            if (currentChunk == 0)
                return 0;
 
            int result = innerStream.Read(buffer, offset, Math.Min(count, currentChunk - currentChunkReaded));
 
            currentChunkReaded += result;
            return result;
        }
 
        private void ReadNextChunkDeclaration()
        {
            int result;
            while (true)
            {
                string temp = ReadLine();
 
                if (int.TryParse(temp.Trim(), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out result))
                {
                    currentChunk = result;
                    currentChunkReaded = 0;
                    return;
                }
            }
        }
 
        private string ReadLine()
        {
            string result = "";
            while (!result.EndsWith("\r\n"))
            {
                int b = innerStream.ReadByte();
                if (b == -1)
                    return result;
                result += (char)b;
            }
            return result.Substring(0, result.Length - 2);
        }
 
        public override bool CanRead
        {
            get { return true; }
        }
 
        public override bool CanSeek
        {
            get { return false; }
        }
 
        public override bool CanWrite
        {
            get { return false; }
        }
 
        public override void Flush()
        {
            throw new NotSupportedException();
        }
 
        public override long Length
        {
            get { throw new NotSupportedException(); }
        }
 
        public override long Position
        {
            get
            {
                throw new NotSupportedException();
            }
            set
            {
                throw new NotSupportedException();
            }
        }
 
        public override long Seek(long offset, SeekOrigin origin)
        {
            throw new NotSupportedException();
        }
 
        public override void SetLength(long value)
        {
            throw new NotSupportedException();
        }
 
        public override void Write(byte[] buffer, int offset, int count)
        {
            throw new NotSupportedException();
        }
    }
3
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2010, 14:53

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как выводить и принимать данные с usb
как выводить и принимать данные с usb и как это соответствует сигналам на контактах usb пожалуйса...

Как принимать PayPal платежи в России?
Привет всем! Как я понимаю, будучи гражданином России, у меня нет возможности открыть PayPal...

Как заставить QTcpSocket принимать данные?
Имеется приложение на Python, которое хотелось бы связать с одним приложением на C++. Использую Qt...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.