I'm using Node https
library to send data to Facebook API. I end up with error:
getaddrinfo ENOTFOUND https://graph.facebook.com/ https://graph.facebook.com/:443
I find it weird, because the same request made with Postman goes through without any problem.
I tried nslookup
:
$ nslookup https://graph.facebook.com/
Server: 1.1.1.1
Address: 1.1.1.1#53
** server can't find https://graph.facebook.com/: NXDOMAIN
Not sure what causes this.
This is my code with anonymized tokens:
var inputData = new Array;
inputData.firstname = "First name";
inputData.lastname = "Last name"
inputData.phone = "Phone";
inputData.email = "Email";
inputData.workable_stage = "Applied";
inputData.access_token = 'xxx';
var https = require('https');
var crypto = require('crypto'); // Facebook API requires hashing of user data
var querystring = require('querystring');
const firstname_hash = crypto.createHash('sha256');
const lastname_hash = crypto.createHash('sha256');
const phone_hash = crypto.createHash('sha256');
const email_hash = crypto.createHash('sha256');
// hash user data
firstname_hash.update(inputData.firstname);
var firstname_hashed = firstname_hash.digest('hex');
lastname_hash.update(inputData.lastname);
var lastname_hashed = lastname_hash.digest('hex');
phone_hash.update(inputData.phone);
var phone_hashed = phone_hash.digest('hex');
email_hash.update(inputData.email);
var email_hashed = email_hash.digest('hex');
// prepare data object
var fb_data = [
{ match_keys:
{
"fn": firstname_hashed,
"ln": lastname_hashed,
"phone": phone_hashed,
"email": email_hashed
},
event_name: "Lead",
event_time: Date.now() / 1000 | 0, // UNIX timestamp in seconds, see: https://stackoverflow.com/a/221297/6178132
custom_data: {
workable_stage: inputData.workable_stage,
}
}
]
body = {
access_token: inputData.access_token,
upload_tag: "store_data",
data: fb_data
}
console.log(querystring.stringify(body));
var postData = querystring.stringify(body);
// send http request
const options = {
hostname: 'https://graph.facebook.com/',
port: 443,
path: '/v3.3/123/events',
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data',
'Content-Length': Buffer.byteLength(postData)
}
};
const req = https.request(options, (res) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
res.setEncoding('utf8');
res.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
res.on('end', () => {
console.log('No more data in response.');
});
});
req.on('error', (e) => {
console.error(`problem with request: ${e.message}`);
});
// Write data to request body
req.write(postData);
req.end();