Skip to content

Commit

Permalink
fix(HTTP Request Node): avoid error when response doesn't include con…
Browse files Browse the repository at this point in the history
…tent-type (#4365)

* 🐛 Fix bug when response doesn't include content type

* ⚡ Improve autodetect response format

* ⚡ Make content-type match more specific

* ⚡ Improve list of content-types to download
  • Loading branch information
RicardoE105 committed Oct 20, 2022
1 parent 7fcd821 commit 61b9909
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 3 deletions.
26 changes: 26 additions & 0 deletions packages/nodes-base/nodes/HttpRequest/GenericFunctions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,3 +68,29 @@ export const getOAuth2AdditionalParameters = (nodeCredentialType: string) => {
};
return oAuth2Options[nodeCredentialType];
};

//https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
export const binaryContentTypes = [
'image/',
'audio/',
'video/',
'application/octet-stream',
'application/gzip',
'application/zip',
'application/vnd.rar',
'application/epub+zip',
'application/x-bzip',
'application/x-bzip2',
'application/x-cdf',
'application/vnd.amazon.ebook',
'application/msword',
'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
'application/vnd.ms-fontobject',
'application/vnd.oasis.opendocument.presentation',
'application/pdf',
'application/x-tar',
'application/vnd.visio',
'application/vnd.ms-excel',
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
'application/x-7z-compressed',
];
10 changes: 7 additions & 3 deletions packages/nodes-base/nodes/HttpRequest/V3/HttpRequestV3.node.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,11 @@ import {

import { OptionsWithUri } from 'request-promise-native';

import { getOAuth2AdditionalParameters, replaceNullValues } from '../GenericFunctions';
import {
binaryContentTypes,
getOAuth2AdditionalParameters,
replaceNullValues,
} from '../GenericFunctions';
export class HttpRequestV3 implements INodeType {
description: INodeTypeDescription;

Expand Down Expand Up @@ -1204,11 +1208,11 @@ export class HttpRequestV3 implements INodeType {
) as boolean;

if (autoDetectResponseFormat) {
const responseContentType = response.headers['content-type'];
const responseContentType = response.headers['content-type'] ?? '';
if (responseContentType.includes('application/json')) {
responseFormat = 'json';
response.body = JSON.parse(Buffer.from(response.body).toString());
} else if (['image', 'audio', 'video'].some((e) => responseContentType.includes(e))) {
} else if (binaryContentTypes.some((e) => responseContentType.includes(e))) {
responseFormat = 'file';
} else {
responseFormat = 'text';
Expand Down

0 comments on commit 61b9909

Please sign in to comment.