Как проверить полный URL-адрес, созданный HTTParty?
Я хочу посмотреть полный URL-адрес, который был создан из моих параметров, который был создан из моих параметров, до или после его отправки, это не имеет значения.
Я также был бы счастлив схватить это из объекта ответа, но я тоже не вижу способа сделать это.
(бит фона)
Я создаю оболочку для API, используя драгоценный камень HTTParty. Его широко работает, но иногда я получаю неожиданный ответ от удаленного сайта, и я хочу понять, почему - это что-то, что Ive отправил неправильно? Если да, то? Я каким-то образом исказил запрос? Если посмотреть на необработанный URL-адрес, это будет полезно для устранения неполадок, но я не могу понять, как это сделать.
Например:
HTTParty.get('http://example.com/resource', query: { foo: 'bar' })
Предположительно генерирует:
http://example.com/resource?foo=bar
Но как я могу это проверить?
В одном случае я сделал это:
HTTParty.get('http://example.com/resource', query: { id_numbers: [1, 2, 3] }
Но это не сработало. Через эксперименты я смог произвести то, что сработало:
HTTParty.get('http://example.com/resource', query: { id_numbers: [1, 2, 3].join(',') }
Таким образом, подход HTTPartys по умолчанию к формированию строки запроса не соответствовал предпочтительному формату API-дизайнеров. Thats штраф, но было неловко выяснить, что именно нужно.
Ответы
Ответ 1
Вы не передали базовый URI в своем примере, чтобы он не работал.
Исправляя это, вы можете получить весь URL-адрес следующим образом:
res = HTTParty.get('http://example.com/resource', query: { foo: 'bar' })
res.request.last_uri.to_s
# => "http://example.com/resource?foo=bar"
Использование класса:
class Example
include HTTParty
base_uri 'example.com'
def resource
self.class.get("/resource", query: { foo: 'bar' })
end
end
example = Example.new
res = example.resource
res.request.last_uri.to_s
# => "http://example.com/resource?foo=bar"
Ответ 2
Вы можете просмотреть всю информацию о запросах, которые HTTParty отправляет с помощью первой настройки:
class Example
include HTTParty
debug_output STDOUT
end
Затем он распечатает информацию о запросе, включая URL, на консоли.