gpt4 book ai didi

javascript - API 响应在 Node 中为 NULL 但在 Python 中运行良好

转载 作者:搜寻专家 更新时间:2023-11-01 00:04:07 25 4
gpt4 key购买 nike

我必须为这个项目使用 Node ,它返回为 null。

'use strict';

var https = require('https');
var pathString = '/api/SomeAPI/Start?Query=SomeData&Account=USER\sean1234&needed=0';

var request = https.get({
host: "some-host-path",
path: pathString,
header: {'Content-Type': 'application/json'}
}, function(response) {

var json = "";
response.on('data', function(chunk) {
json += chunk;
console.log("json is: " + json);

});
response.on('end', function() {
var jsonData = JSON.parse(json);
var count = 0;
var reply = "";
var keys;

console.log("jsonData is: " +jsonData);
console.log("Object.keys(jsonData) is: " + Object.keys(jsonData));
console.log("Object.keys(jsonData[0]) is: " + Object.keys(jsonData[0]));
//console.log("Object.keys(jsonData[0].SomeData is: " + Object.keys(jsonData[0].SomeData));
//The previous line raises an Error: TypeError: Cannot convert undefined or null to object

console.log("\njsonData[0].SomeData: " +jsonData[0].SomeData);

count = jsonData[0].SomeData;

console.log("JSON.stringify(count): " + JSON.stringify(count));
});

});

上面node.js代码的日志如下:

json is: [{"SomeData":null}]
jsonData is: [object Object]
Object.keys(jsonData) is: 0
Object.keys(jsonData[0]) is: SomeData

jsonData[0].SomeData: null
JSON.stringify(count): null

如您所见,它们返回为 null 但是当我这次尝试使用 Python 访问相同的 API 时,它按预期返回了正确的值:

import json
import requests

api_url = 'some-api-url'

response = requests.get(api_url, headers={'Content-Type': 'application/json'})
print(response.status_code)
loaded = json.loads(response.content.decode('utf-8'))
print(loaded)

上述 Python 代码的日志:

200
[{'SomeData': 2893}]

我别无选择,只能在这个项目中使用 node。我错过了什么?这里似乎有什么问题?

附言如果我没有表达清楚,我将对上面的 Node 和 Python 代码使用完全相同的 API。

最佳答案

当我尝试更改 API pathString 中的参数时,我找到了问题的根本原因(出于安全考虑,我无法在此处发布实际的原因)

API 是这样的

pathString = '/api/SomeAPI/Start?Query=SomeData&Account=USER\sean1234&needed=0';

我为“帐户”尝试了不同的有效用户帐户值,直到我最终用一个统计信息为字母“b”的用户对其进行了测试,因此路径现在类似于:

pathString = '/api/SomeAPI/Start?Query=SomeData&Account=USER\brian3415&needed=0';

这个带\b 的 pathString 开始抛出错误:

throw new TypeError('Request path contains unescaped characters');

为了转义未转义的字符,我将“\”加倍为“\\”,因此路径:

pathString = '/api/SomeAPI/Start?Query=SomeData&Account=USER\\brian3415&needed=0';

有了这个,不再抛出错误 + API 最终返回具有正确整数的预期 JSON。

我觉得奇怪的是 API 仍然返回空值 [{"SomeData":null}] 的 JSON 而不是导致完全错误。更糟糕的是,我有另一个具有不同参数的 API(将 pathString 中的“SomeData”更改为“SomeOtherData”),它实际上工作正常 - 返回正确的 [{"SomeOtherData":123}] - 即使使用未转义的“\”。

关于javascript - API 响应在 Node 中为 NULL 但在 Python 中运行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51517968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com