Доступ к заголовкам для Net :: HTTP :: Post в ruby - PullRequest
9 голосов
/ 24 марта 2011

У меня есть следующий бит кода:

    uri = URI.parse("https://rs.xxx-travel.com/wbsapi/RequestListenerServlet")
    https = Net::HTTP.new(uri.host,uri.port)
    https.use_ssl = true
    req = Net::HTTP::Post.new(uri.path)
    req.body = searchxml
    req["Accept-Encoding"] ='gzip'
    res = https.request(req)

Обычно это работает нормально, но сервер на другой стороне жалуется на что-то в моем XML, и тамошним специалистам нужно сообщение xml И отправляемые заголовки.

У меня есть xml-сообщение, но я не могу понять, как добраться до заголовков, которые отправляются с вышеуказанным.

Ответы [ 3 ]

11 голосов
/ 24 марта 2011

Для доступа к заголовкам используйте метод each_header:

# Header being sent (the request object):
req.each_header do |header_name, header_value|
  puts "#{header_name} : #{header_value}"
end

# Works with the response object as well:
res.each_header do |header_name, header_value|
  puts "#{header_name} : #{header_value}"
end
11 голосов
/ 24 марта 2011

Вы можете добавить:

https.set_debug_output $stderr

перед запросом, и вы увидите в консоли реальный http-запрос, отправленный на сервер.
очень полезно для отладки такого рода сценариев.

2 голосов
/ 25 марта 2011

Взгляните на документы для Net :: HTTP's post метода.Он принимает path значения uri, данные (XML), которые вы хотите опубликовать, затем заголовки, которые вы хотите установить.Он возвращает ответ и тело в виде двухэлементного массива.

Я не могу проверить это, потому что вы скрыли хост, и шансы хорошие, он принимает зарегистрированный аккаунт, но код выглядит правильно счто я помню при использовании Net :: HTTP.

require 'net/http'
require 'uri'

uri = URI.parse("https://rs.xxx-travel.com/wbsapi/RequestListenerServlet")
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
req, body = https.post(uri.path, '<xml><blah></blah></xml>', {"Accept-Encoding" => 'gzip'})
puts "#{body.size} bytes received."
req.each{ |h,v| puts "#{h}: #{v}" }

Посмотрите на Typhoeus как на альтернативу, и, на мой взгляд, проще использовать gem, особенно «Выполнение быстрых запросов»раздел.

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