В Ruby, используя "net/http", мы должны присоединиться к URL-адресу и запросить с помощью "?" сами?
В следующем коде мы должны сами присоединиться к url.path
и url.query
, используя символ ?
? Есть ли более элегантный способ сделать это? Я должен использовать net/http
, потому что в некоторых ситуациях я хочу также поместить строку в заголовок для агента-пользователя.
require 'net/http'
url_string = 'http://www.time.gov/timezone.cgi?Pacific/d/-8'
url = URI.parse(url_string)
response = Net::HTTP.start(url.host, url.port) do |http|
http.get(url.path + '?' + url.query)
end
puts response.body[/<td.*(\d\d:\d\d:\d\d)/, 1]
Ответы
Ответ 1
Используйте метод request_uri
для объекта URI:
http://www.ruby-doc.org/stdlib/libdoc/uri/rdoc/classes/URI/HTTP.html#M009499
Обновленная версия вашего кода:
require 'net/http'
url_string = 'http://www.time.gov/timezone.cgi?Pacific/d/-8'
url = URI.parse(url_string)
response = Net::HTTP.start(url.host, url.port) do |http|
http.get(url.request_uri)
end
puts response.body[/<td.*(\d\d:\d\d:\d\d)/, 1]
Ответ 2
Вы можете использовать URI#request_uri
Из документов:
Возвращает полный путь для HTTP запрос, как требуется Net:: HTTP:: Get.
Если URI содержит запрос, полный путь URI # path +? + URI #. В противном случае путь просто URI # путь.
Ответ 3
Net/http может стать хорошей основой, но это не очень удобно.
Если ваш клиент обращается к хорошо продуманному сервису, то что-то вроде ActiveResource, rest-client, или HTTParty будет лучшим выбором. Вы также можете написать независимый от приложения модуль, который цивилизовывает сеть /http таким образом, который хорошо работает для вас.