Отримання бінарного вмісту в Node.js за допомогою запиту


135

Я намагався GETвикористовувати бінарні дані, використовуючи requestщось таке:

var requestSettings = {
    method: 'GET',
    url: url,
};
request(requestSettings, function(error, response, body) {
    // Use body as a binary Buffer
}

Але bodyзавжди було кілька байтів, відмінних від очікуваних. Після подальшого дослідження я з’ясував, що requestприпущений bodyрядок і замінив усі небайтові байти.

Я намагався додати

encoding: 'binary'

до, requestSettingsале це не допомогло.

Як я можу отримати двійкові дані?

Відповіді:


300

Добре, після багатого копання я виявив, що requestSettingsповинен:

encoding: null

І тоді bodyбуде тип Buffer, замість типового, що є рядковим.


50
Який безглуздий кошмар. Мені знадобилося 12 годин, щоб полювати на це. Здається, що модуль запиту вузлів за замовчуванням розглядає вхідні дані у вмісті відповіді як UTF-8 і автоматично перетворює будь-які послідовності байтів, що не належать до UTF-8, у непотрібні (але дійсні UTF-8) символи. Ніяка кількість параметрів "mimetype" тощо не працює (не те, що передбачається для даних відповідей ). encoding: nullЄдиний варіант, який працює. І - дуже погано задокументований. У документації щодо запиту вузла повинно бути очевидне попередження про те, як для отримання чистих двійкових даних Дякую!
Дан Ніссенбаум

2
@StoyanBerov, я радий, що ця відповідь виявилася корисною, але за 5 років, як я написав цю відповідь, readme пакета була виправлена, щоб виділити це рішення в декількох місцях. Крім того, настійно рекомендую замість цього пакету використовувати пакет, який підтримує Обіцянки.
GilZ

@Gilz, дякую за оновлення! Я фактично мав враження, що кодування за замовчуванням встановлено на нуль. Крім того, проблема виникла у застарілому проекті, встановленому на надто стару версію вузла та зворотній зв'язок лише скрізь.
Стоян Беров

Знову наткнувся на це - ще не використовував це у віках. Кодування: нуль для порятунку
Піро,

0

Отримана відповідь не вирішила моєї проблеми. Я якось зрозумів, що gzip: trueпрацює.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.