不確定這是否是由多部分發布請求引起的問題。 從客戶端,我使用node.js發送了一個post請求。該職位的身體是一個JSON陣列Ruby Sinatra帶多部分發布請求
var post_req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Response: ' + chunk);
});
}).on('error',function(){});
post_req.write(data.toString().split("\0").join(""));
post_req.end();
在服務器端(紅寶石西納特拉),我有一個後處理程序,它會打印出JSON陣列
post '/prediction' do
puts request.body.read
end
它打印出一個奇怪的不完整的JSON數組在數組之前有一個奇怪的字符串「13b2b」。 接收到的數據可以在這裏找到:https://gist.github.com/wenchaojiang/9880181
我相信我發送的數據是有效的JSON陣列,爲什麼西納特拉不能完全接受它,哪裏奇怪「13b2b」從何而來?任何想法?
-----------編輯-------------
示例數據很大。它可以在這裏找到: https://gist.github.com/wenchaojiang/9881235
另一個奇怪的是,當我用下面的node.js服務器上,JSON可以被正確接收
http.createServer(function (req, res) {
if (req.method == "POST") {
var queryData = "";
req.on('data', function(data) {
queryData += data;
});
req.on('end', function() {
var obj = JSON.parse(queryData);
console.log(JSON.parse(queryData).payload);
res.writeHead(200, "OK", {'Content-Type': 'text/plain'});
res.end();
});
}
}).listen(3001, '0.0.0.0');
----------- ------編輯----------------------------
似乎Sinatra會收到2個帖子請求即使我只從node.js端發送過一次。服務器從第一請求和第二請求後上述接受不完整的JSON導致以下錯誤
!! Invalid request
Invalid HTTP format, parsing fails.
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/request.rb:82:in `execute'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/request.rb:82:in `parse'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/connection.rb:39:in `receive_data'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run_machine'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/eventmachine-1.0.0/lib/eventmachine.rb:187:in `run'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/backends/base.rb:63:in `start'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/thin-1.5.0/lib/thin/server.rb:159:in `start'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/lib/rack/handler/thin.rb:13:in `run'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/lib/rack/server.rb:265:in `start'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/lib/rack/server.rb:137:in `start'
/usr/local/rvm/gems/ruby-1.9.3-p194/gems/rack-1.4.1/bin/rackup:4:in `<top (required)>'
/usr/local/rvm/gems/ruby-1.9.3-p194/bin/rackup:19:in `load'
/usr/local/rvm/gems/ruby-1.9.3-p194/bin/rackup:19:in `<main>'
它看起來像你的有效的JSON已經是奇怪,有什麼用'.split'和即時'.join',所以我想這也正是問題。你能告訴我們一些「數據」的例子嗎? –
@Tim我編輯的問題 – GingerJim
Oooh,有趣。 Ruby方面總是隻能得到第一個要點,或者Ruby收到的數據量是多少? –