The same request to external API works in go, postman, curl, but doesn't work in node.js
Solution 1:
This is likely due to TLS fingerprinting. Akamai is able to detect that you're using Node.JS based on information gathered during the TLS handshake (cipher suites, etc.) when you send a request. The website must have set a rule through Akamai to block Node.
Try something like this:
const tls = require('tls');
const https = require('https');
const defaultCiphers = tls.DEFAULT_CIPHERS.split(':');
const shuffledCiphers = [
defaultCiphers[0],
// Swap the 2nd & 3rd ciphers:
defaultCiphers[2],
defaultCiphers[1],
...defaultCiphers.slice(3)
].join(':');
request = require('https').get('https://google.com', {
ciphers: shuffledCiphers
}).on('response', (res) => {
console.log(res.statusCode);
});
// source: https://httptoolkit.tech/blog/tls-fingerprinting-node-js/
More information about this can be found here: https://httptoolkit.tech/blog/tls-fingerprinting-node-js/