Я использую Ruby для очистки веб-страниц, которые иногда возвращают перенаправления, которым я хочу следовать. Есть много драгоценных камней Ruby, которые делают это, но есть проблема:
Ruby URI.parse
взрывается на некоторых URI, которые технически недействительны, но работают в таких браузерах, как "http://www.google.com/?q=<>"
URI.parse("http://www.google.com/?q=<>") #=> error
require 'addressable/uri'
Addressable::URI.parse("http://www.google.com/?q=<>") #=> works
Все клиентские библиотеки HTTP, которые я пробовал (HttParty, Faraday, RestClient), ломаются, когда сталкиваются с таким URI в перенаправлении (это на ruby 1.9.3)
отдых-клиент:
require 'rest-client'
RestClient.get("http://bitly.com/ReeuYv") #=> explodes
Фарадей:
require 'faraday'
require 'faraday_middleware'
Faraday.use(FaradayMiddleware::FollowRedirects)
Faraday.get("http://bitly.com/ReeuYv") #=> explodes
httpвечеринка:
require 'httparty'
HTTParty.get("http://bitly.com/ReeuYv") # => explodes
открытый-ури:
require 'open-uri'
open("http://bitly.com/ReeuYv") # => explodes
Что я могу сделать, чтобы это сработало?
URI.parse
на самом деле просто соответствует RFC 3986 в этом случае. -<
и>
должны быть закодированы в URL. Браузеры просто более снисходительны. - person Thilo   schedule 06.11.2012<>
, является допустимым, неверно. - person Mark Thomas   schedule 06.11.2012