最近我遇到了解析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
答案 0 :(得分:0)
我不太确定它是否那么简单,但如果您的JSON包含{}
标记,那么您故意返回<html
?你想要什么行为?
如果要区分html和json响应,只需使用Content-Type响应头