Ruby net/http GET-запросы с пустым телом

В настоящее время я просто пытаюсь заставить простой запрос GET работать в Ruby, однако я вижу какое-то странное поведение.

У меня есть приложение Open Web Analytics, работающее с Docker, и оно доступно по адресуhttp://127.0.0.1:8080/.

Я могу получить доступ к сайту входа, и все работает нормально.

Теперь я хочу сделать запрос GET с Ruby, чтобы проанализировать тело этого запроса, но я не могу заставить его работать на других языках, таких как Python или простойGETзапросы через терминал работает нормально. Почему не с Руби?

Вот мой очень простой код Ruby:

      require 'net/http'

url = 'http://127.0.0.1:8080/'
uri = URI(url)

session = Net::HTTP.new(uri.host, uri.port)
response = session.get(uri.request_uri)

puts response.body

Который ничего не выводит. Если я загляну в журналы NGINX из контейнера, я увижу, что запрос выполняется, но нет дальнейшего перенаправления, как в других методах (см. ниже).

      172.23.0.1 - - [02/Feb/2023:20:02:59 +0000] "GET / HTTP/1.1" 302 5 "-" "Ruby" "-" 0.088 0.088 . -

Если я делаю простой GET через терминал, он работает:

      GET http://127.0.0.1:8080/

выведет правильное тело, а в логах NGINX я вижу следующее:

      172.23.0.1 - - [02/Feb/2023:20:20:10 +0000] "GET / HTTP/1.1" 302 5 "-" "lwp-request/6.61 libwww-perl/6.61" "-" 0.086 0.088 . -
172.23.0.1 - - [02/Feb/2023:20:20:10 +0000] "GET /index.php?owa_do=base.loginForm&owa_go=http%3A%2F%2F127.0.0.1%3A8080%2F& HTTP/1.1" 200 3200 "-" "lwp-request/6.61 libwww-perl/6.61" "-" 0.086 0.088 . -

Выполнение этого в Python со следующим базовым кодом также работает и дает такие же результаты, как и в терминальной версии GET:

      import requests
x = requests.get("http://127.0.0.1:8080/")
print(x.content)

Что я делаю не так?

1 ответ

Получил работу со следующими переадресациями (см. Здесь ):

      begin
  response = Net::HTTP.get_response(URI.parse(url))
  url = response['location']
end while response.is_a?(Net::HTTPRedirection)
Другие вопросы по тегам