我正在使用Node https
库将数据发送到Facebook API。我最终遇到错误:
getaddrinfo ENOTFOUND https://graph.facebook.com/ https://graph.facebook.com/:443
我觉得很奇怪,因为与邮递员(Postman)进行的相同请求没有问题。
我尝试了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
不确定是什么原因造成的。
这是我的带有匿名令牌的代码:
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();
答案 0 :(得分:1)
如果您像这样更改选项,则请求应该可以正常工作,hostname参数是唯一需要更新的参数:
const options = {
hostname: 'graph.facebook.com',
port: 443,
path: '/v3.3/123/events',
method: 'POST',
headers: {
'Content-Type': 'multipart/form-data',
'Content-Length': Buffer.byteLength(postData)
}
};