gpt4 book ai didi

javascript - 使用 node.js 处理内容类型 application/json 的服务器响应

转载 作者:行者123 更新时间:2023-12-02 22:37:19 26 4
gpt4 key购买 nike

我有一个服务器为 CURL 请求返​​回以下内容 curl --insecure -i -F files=@test.png https://xxx.xx.xx.xxx/powerai-vision/api/dlapis/b06564c9-7c1e-4642-a5a6-490310563d49

HTTP/1.1 200 OK
Server: nginx/1.15.5
Date: Mon, 04 Nov 2019 06:23:14 GMT
Content-Type: application/json
Content-Length: 3556
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: Servlet/3.1
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: X-Auth-Token, origin, content-type,accept, authorization
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS, HEAD
Content-Language: en
X-Frame-Options: SAMEORIGIN
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Strict-Transport-Security: max-age=15724800; includeSubDomains
{"webAPIId":"b06564c9-7c1e-4642-a5a6-490310563d49","imageUrl":"http://powerai-vision-service:9080/powerai-vision-api/uploads/temp/b06564c9-7c1e-4642-a5a6-490310563d49/58c6eb6a-aaa4-4d6b-8c20-aadec4558107.png","imageMd5":"bd123739171d95d30d570b2cd0ed1aed","classified":[{"confidence":0.997600257396698,"ymax":997,"label":"white_box","xmax":1407,"xmin":1166,"ymin":760,"attr":[{}]},],"result":"success"}

我想使用node.js构建一个Web应用程序来处理这个问题并在最后获取json字符串。我为此目的使用以下代码。

'use strict';
/* eslint-env node */

const express = require('express');
const request = require('request');
const MISSING_ENV =
'Missing required runtime environment variable POWERAI_VISION_WEB_API_URL';

require('dotenv').config({
silent: true,
});

const app = express();
const port = process.env.PORT || process.env.VCAP_APP_PORT || 8081;
const poweraiVisionWebApiUrl = process.env.POWERAI_VISION_WEB_API_URL;

console.log('Web API URL: ' + poweraiVisionWebApiUrl);

if (!poweraiVisionWebApiUrl) {
console.log(MISSING_ENV);
}

app.use(express.static(__dirname));
app.use(express.json());

app.post('/uploadpic', function (req, result) {
if (!poweraiVisionWebApiUrl) {
console.log(MISSING_ENV);
result.send({ data: JSON.stringify({ error: MISSING_ENV }) });
} else {
req.pipe(request.post({
url: poweraiVisionWebApiUrl,
agentOptions: {
rejectUnauthorized: false,
}
}, function (err, resp, body) {
if (err) {
console.log(err);
}
console.log('Check 22');
console.log(body);
// console.log(JSON.parse(body).webAPIId);
result.send({ data: body });
}));
}
});

app.listen(port, () => {
console.log(`Server starting on ${port}`);
});

我遇到的问题是我不知道如何访问正文中的元素(json 强)。现在 console.log(body) 打印垃圾 ( https://github.com/IBM/powerai-vision-object-detection/issues/61 )。在node.js 中处理这个字符串的正确方法是什么?

我是 Node.js 编程新手。

当我打印响应的标题时,我得到以下输出。

{
server: 'nginx/1.15.5',
date: 'Tue, 05 Nov 2019 02:47:37 GMT',
'content-type': 'application/json',
'transfer-encoding': 'chunked',
connection: 'keep-alive',
vary: 'Accept-Encoding',
'x-powered-by': 'Servlet/3.1',
'access-control-allow-origin': '*',
'access-control-allow-headers': 'X-Auth-Token, origin, content-type, accept, authorization',
'access-control-allow-credentials': 'true',
'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS, HEAD',
'content-language': 'en',
'x-frame-options': 'SAMEORIGIN',
'x-content-type-options': 'nosniff',
'x-xss-protection': '1; mode=block',
'strict-transport-security': 'max-age=15724800; includeSubDomains',
'content-encoding': 'gzip'
}

看起来内容编码是gzip。为什么curl 输出和node.js 响应不同?我应该如何处理 gzip 内容?有链接吗?

最佳答案

看起来您正在以正确的方式解析 JSON。

但是查看您在 github 上发布的屏幕截图后,您似乎在正文中有一个二进制文件而不是 JSON(可能是图像?)。如果我是您,我会检查您是否正在调用 API 并发送正确的参数。

更新:

看到 header 后,看起来响应仍然是 gzip 压缩的,遵循此操作应该可以解决您的问题:https://gist.github.com/miguelmota/9946206

curl 可能会自动为您执行此操作,这就是您看到纯 json 的原因,或者可能是因为 curl 请求设置了一个 header ,告诉服务器不要使用 gzip

更新2:

尝试通过添加 gzip: true 来发出请求,它应该会为您完成所有操作

 req.pipe(request.post({
url: poweraiVisionWebApiUrl,
gzip: true,
agentOptions: {
rejectUnauthorized: false,
}
}, function (err ...)

关于javascript - 使用 node.js 处理内容类型 application/json 的服务器响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58702439/

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