我正在尝试使用node / HTTPS发出POST请求,但我一直收到此错误:
BODY:{“message”:“MalformedJsonException: com.google.gson.stream.MalformedJsonException:使用 JsonReader.setLenient(true)接受第1行的格式错误的JSON 11路径$“,”mdcKey“:”“}
以下是启动请求的代码:
const https = require('https');
const querystring = require('querystring');
const POSTData = querystring.stringify({
'addressTo': 'myemail@address.com',
'subject': 'testing your email template',
'templateName': 'genericTemplate',
'bodyText': 'this is a test'
});
console.log(POSTData);
const HTTPOptions = {
hostname: 'url.com',
port: 00000,
path: '/path',
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
};
const HTTPSrequest = https.request(HTTPOptions, (response) => {
console.log(`STATUS: ${res.statusCode}`);
console.log(`HEADERS: ${JSON.stringify(res.headers)}`);
response.setEncoding('utf8');
response.on('data', (chunk) => {
console.log(`BODY: ${chunk}`);
});
response.on('end', () => {
console.log('No more data in response.');
});
});
HTTPSrequest.on('error', (error) => {
console.log(`problem with request: ${error}`);
});
// write data to request body
HTTPSrequest.write(POSTData);
HTTPSrequest.end();
我假设POSTData是“格式错误的JSON”,这就是字符串化的样子:
addressTo =名称%40companyname.com&安培受试者=测试%20your%20email%20template&安培; TEMPLATENAME = genericTemplate&安培; bodyText的=此%图20是%20A%20test
我不确定我在做什么导致格式错误的JSON。我错过了什么?
答案 0 :(得分:2)
您正在发送application/x-www-form-urlencoded
个有效负载,但告诉服务器它是application/json
。由于这种不匹配,服务器正在抱怨。
简单的解决方案应该是将querystring.stringify
更改为JSON.stringify
。
您可能还需要指定Content-Length
标头,因为某些服务器可能不支持分块请求(这是节点中的默认值)。如果你确实添加了这个,请确保使用Buffer.byteLength(POSTData)
作为标题值,而不仅仅是POSTData.length
,因为前者适用于多字节字符,后者则返回字符数(不是字节)。 / p>
答案 1 :(得分:1)
有关@mscdex
的详细说明,请提供更多帮助 querystring.stringify
返回后的选项对象。否则,您不会知道字符串化正文数据的length
。
请务必注意,您的选项对象中需要两个额外的标头才能成功发布请求。这些是:
'Content-Type': 'application/json',
'Content-Length': POSTData.length
检查示例:
const HTTPOptions = {
hostname: 'url.com',
port: 00000,
path: '/path',
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Content-Length': POSTData.length
}
};
你也可以看到这个例子:1st post。
答案 2 :(得分:-1)
JsonReader.setLenient(true) 在第 1 行第 11 列接受格式错误的 JSON 路径 $","mdcKey":""}