Node.js HTTP GET не возвращает все данные - PullRequest
3 голосов
/ 14 августа 2011

HTTP-модуль Node не возвращает все ожидаемые данные с этого URL: http://itradedata.co.za/pmchart/prices/GetPricesTRI.asp?Shortname=ACE&numprices=5

При просмотре в браузере есть 5 ценовых записей, но только одна из данных HTTP GET Node.Анализ пакетов показывает все входящие данные, так почему же их нет в выходных данных?

var http = require('http'),
    host = 'itradedata.co.za',
    records = 5,
    url = '/pmchart/prices/GetPricesTRI.asp?Shortname=ACE&numprices=' + records,
    client = http.createClient(80, host),
    headers = { 'host': host },
    req;

req = client.request('GET', url, headers);
req.on('response', function(res) {
    console.log(res.statusCode);
    res.on('data', function (chunk) {
        console.log(chunk.toString());
    });
});
req.end();

Проблема, похоже, заключается в том, как сервер возвращает данные ... cURL такжене показывает данные при запуске curl {url} в терминале, но записывает все в файл при использовании curl {url} -o {file}.Что здесь происходит?

Ожидаемый результат:

# Attempting to get 5 prices for theTicker: ACE<BR>
# Trying JSECODE<BR>
# Sending prices for Entity_ID: 17352 Shortname:  ShareID:  JSECode: <BR>
2011-8-15,46,46,46,46,0,08268
2011-8-12,46,46,46,46,51,0068
2011-8-11,46,46,46,46,51,0068
2011-8-10,46,46,46,46,51,0068
2011-8-8,46,46,46,46,51,00068

Фактический результат:

# Attempting to get 5 prices for theTicker: ACE<BR>
# Trying JSECODE<BR>
# Sending prices for Entity_ID: 17352 Shortname:  ShareID:  JSECode: <BR>
2011-8-8,46,46,46,46,51,00068

Четыре отсутствующие записи находятся в середине результата.

1 Ответ

2 голосов
/ 15 августа 2011

Я относительно уверен, что это потому, что этот сайт отправляет \r, но не \n.

Содержимое буфера:

2c 30 30 0d 32 30

0d говорит "вернуться к началу"линии "0a говорит" следующая строка ".Так что это всегда возвращается, но никогда не пишет новую строку.Он просто перезаписывает существующий вывод.

Вы можете попробовать заменить 0d на 0a, чтобы увидеть все.

Редактировать: Попробовал, все работает.Код:

req = client.request('GET', url, headers);
req.on('response', function(res) {
    console.log(res.statusCode);
    res.on('data', function (chunk) {
        for (var i=0; i<chunk.length; i++)
            if (chunk[i] === 0xd) chunk[i] = 0xa
        console.log(chunk.toString());
    });
});
req.end();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...