使用JSON响应传输HTML文档。轨道

时间:2011-09-20 13:03:38

标签: html ruby-on-rails ruby json parsing

最近我遇到了解析JSON响应的问题,其中包含html注入。

 [{"Date":"\/Date(1316445326553+0400)\/",
 "Dishes":null,"Id":103,"Name":"Menutka уже с Вами!",
 "PictureId":130144,
 "TextHtml":"<!DOCTYPE html PUBLIC '-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN' 'http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd'>\u000a<html xmlns='http:\/\/www.w3.org\/1999\/xhtml'>\u000a<head>\u000a... etc",
 "Type":1,"UserId":1,"UserName":"Администратор"}]

并尝试执行JSON.parse response.body,其中响应正文是我的JSON。它默默地服从,但返回空集合。我试图在this site上验证这个json,它说“它有效”

所以我对出了什么问题感到有些困惑。

PS这是我的解析方法:

   def self.get(uri)
raw_url = BASE_URL+uri
url = "#{BASE_URL}"+CGI::escape(uri)
f = File.open('response.log', 'a')
start = Time.new
f.print "#{start.to_s}\t#{uri}"
resp = Net::HTTP.get_response(URI.parse(url))
stop = Time.new
f.puts "\t\t#{stop-start} seconds"
f.close
data = resp.body
begin
  if data.blank? or data.include?('<html')
    return {}
  end
  object = JSON.parse(data)
rescue JSON::ParserError
  raise Exceptions::NothingReturned, "GET Error on #{raw_url}"
end
end

1 个答案:

答案 0 :(得分:0)

我不太确定它是否那么简单,但如果您的JSON包含{}标记,那么您故意返回<html?你想要什么行为?

如果要区分html和json响应,只需使用Content-Type响应头