尝试找出使用Node.js Needle library向API发送RESTful请求的正确方法。我认为除了有关图片网址的代码外,其他所有内容都正确。无论我如何尝试更改其外观或放置位置,都会不断收到错误消息,指出它是无效图像,但不是,URL很好。因此,我的猜测是我的代码是错误的,因此它认为图像的URL可能不是URL(但可能是其他代码或应位于主体/图像URL所在位置的代码)。 / p>
const imageUrl = 'https://upload.wikimedia.org/wikipedia/commons/3/37/Dagestani_man_and_woman.jpg'
// Request parameters.
const params = {
returnFaceId: true,
returnFaceLandmarks: false,
returnFaceAttributes: 'age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'
}
var options = {
body: '{"url": ' + '"' + imageUrl + '"}',
headers: {
'Content-Type': 'application/json',
'Ocp-Apim-Subscription-Key': subscriptionKey
}
}
needle.post(endpoint, params, options, function (err, res, body) {
console.log(`Status: ${res.statusCode}`)
console.log('Body: ', body)
console.log('ERROR: ' + err)
//console.log(res)
})
我还尝试将主体写为普通的ol'对象:body = { 'url': imageURL}
,但仍然遇到相同的错误。
错误:
Status: 400
Body: { error: { code: 'InvalidURL', message: 'Invalid image URL.' } }
这是我要调用的API,已确认可与其他示例一起使用: https://westus.dev.cognitive.microsoft.com/docs/services/563879b61984550e40cbbe8d/operations/563879b61984550f30395236
答案 0 :(得分:0)
对于此请求,您可以使用参数的组合:
因此,您似乎无法直接使用needle.post
,因为它可以查询字符串参数或主体参数,但不能同时查询两者。
所以有几种选择:
对于第一个选项,下面是一个示例:
const imageUrl = 'https://upload.wikimedia.org/wikipedia/commons/3/37/Dagestani_man_and_woman.jpg'
// Request parameters.
const params = {
returnFaceId: true,
returnFaceLandmarks: false,
returnFaceAttributes: 'age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise'
}
// Adding params to query string
serialize = function(obj) {
var str = [];
for (var p in obj)
if (obj.hasOwnProperty(p)) {
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
}
return str.join("&");
}
endpoint = endpoint + "?" + serialize(params)
// Setting body and options
var body = '{ "url": ' + '"' + imageUrl + '"}'
var options = {
headers: {
'Content-Type': 'application/json',
'Ocp-Apim-Subscription-Key': subscriptionKey
}
}
needle.post(endpoint, body, options, function (err, res, body) {
console.log(`Status: ${res.statusCode}`)
console.log('Body: ', body)
console.log('ERROR: ' + err)
//console.log(res)
})