요청을 사용하여 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유일하게 작동하는 옵션이며 매우 잘못 설명되어 있습니다. 노드 요청 문서에 방법에 대한 명백한 경고가 있어야합니다 순수 바이너리 데이터를 검색 할 수 있습니다 감사합니다.!
댄 Nissenbaum에게

2
@StoyanBerov,이 답변이 도움이되었다는 것을 알게되어 기쁩니다. 그러나이 답변을 작성한 후 5 년 동안 패키지 readme가 여러 곳에서이 솔루션을 강조하도록 수정되었습니다. 또한이 패키지 대신 약속을 지원하는 패키지를 사용하는 것이 좋습니다.
GilZ

@ 길츠, 업데이트 주셔서 감사합니다! 실제로 인코딩이 기본적으로 null로 설정되어 있다는 인상을 받았습니다. 또한이 문제는 레거시 프로젝트에서 나타 났으며 이전 노드 버전으로 설정되어 콜백 전용으로 설정되었습니다.
Stoyan Berov

다시 한번 뛰어 들으십시오-연령대에서 이것을 사용하지 않았습니다. 인코딩 : 구조에 null
Pyro

0

수락 된 답변으로 문제가 해결되지 않았습니다. 나는 어떻게 든 그것이 gzip: true효과가 있다고 생각했다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.