Передача документов HTML с ответами JSON.Рельсы - PullRequest
0 голосов
/ 20 сентября 2011

Недавно я столкнулся с проблемой разбора ответов 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. Он тихо подчиняется, но возвращает пустую коллекцию. Я пытался проверить этот 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 голосов
/ 23 сентября 2011

Я не совсем уверен, если это так просто, но вы сознательно возвращаете {}, если ваш JSON содержит тег <html?какое поведение вы хотите?

, если вы хотите различать ответы html и json, просто используйте заголовок ответа Content-Type

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...