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)