我使用node.js和一个名为requestify的库。 代码如下所示:
console.log('body');
console.log(body);
return new Promise(function (f, r) {
requestify.request(myurl, {
method: 'POST',
body : body,
headers : {
"Content-Type" : "application/json; charset=utf-8"
}
})
.then(function (response) {
f({messge : "Success"});
}, function (err) {
console.log(err);
err.code == 405 ? r(err.body) : r({ success: false, message: err });
});
});
当请求包含特殊字符(在本例中为瑞典字符)时,它会抛出错误。
在没有瑞典语字符的情况下发送完全相同的请求,请求成功。
我真的无法访问处理请求的服务器,这就是为什么它很难调试。 但是在发送请求之前我打印了身体,我看不到任何奇怪的东西。 以下是两种不同的身体要求:
// FAILURE
{ eventType: 'createUser',
eventId: '1e2ca3b4-0f6b-4ed9-ae79-2e112c8d693c',
version: '0.1',
date: 2016-10-07T06:42:26.209Z,
attributes:
{ userName: 'akeandersson@gmail.se',
email: 'akeandersson@gmail.se',
firstName: 'Åke',
lastName: 'Andresson',
phoneNumber: '1',
identifier: '198509120328',
assignment: 'se.me',
role: [ 'se.me.role.user' ] },
metadata: {} }
// SUCCESS
{ eventType: 'createUser',
eventId: '1e2ca3b4-0f6b-4ed9-ae79-2e112c8d693c',
version: '0.1',
date: 2016-10-07T06:44:09.857Z,
attributes:
{ userName: 'akeandersson212@gmail.se',
email: 'akeandersson212@gmail.se',
firstName: 'Ake',
lastName: 'Andresson',
phoneNumber: '9',
identifier: '196606095823',
assignment: 'se.me',
role: [ 'se.me.role.user' ] },
metadata: {} }
我还在标题的内容类型中添加了“; charset = utf-8”(默认情况下,根据请求文档,它已经是utf-8)。 但结果仍然相同。知道如何调试这个吗?
这是请求失败时服务器返回的内容:
{
code: 400,
headers:
{ connection: 'close',
'content-type': 'text/plain',
'content-length': '244',
date: 'Fri, 07 Oct 2016 06:42:27 GMT' },
body: 'Unexpected end-of-input: expected close marker for OBJECT (from [Source: ServletInputStreamImpl@75eb88e4; line: 1, column: 0])\n at [Source: ServletInputStreamImpl@75eb88e4; line: 1, column: 767]' }
答案 0 :(得分:1)
我想,您需要将requestify
模块上传到最新版本。我使用的version 0.2.3
并没有给我任何错误。
假设您在尝试阅读norwegian
(或)swedish
字符时遇到错误,我尝试阅读其中包含norwegian
个字符的网站,并使用以下字符代码,我能够将其输出到控制台而不会出现任何错误。与swedish
页面相同。我虽然使用0.2.3
版本(这是最新版本)。我还没有将编码设置为UTF-8
。
var requestify = require('requestify');
requestify.get('http://www.norwegian4people.com/lesson.php?id=41').then(function(response) {
// Get the response body
console.log(response.getBody());
});
希望这有帮助!