У меня есть php-страница, к которой я хочу получить доступ, и эта страница защищена базовой аутентификацией. Я знаю URL и имя пользователя / пароль, они перечислены ниже в коде:
url = 'https://henry.php' # note that it is a php website
username = 'foo'
password = 'bar'
Фарадей обеспечивает базовую функцию аутентификации, их документ говорит, что я должен использовать следующий код:
connection = Faraday.new(url: url) do |conn|
conn.basic_auth(username, password)
end
Я хочу получить тело ответа вышеупомянутого URL, чтобы убедиться, что базовая аутентификация действительно прошла успешно, и я могу получить доступ к контенту, но я не знаю, как это сделать. Я пробовал каждый из следующих способов, но ни один из них не работает:
connection.body
connection.response.body
connection.env.response.body
# or
r = connection.get
r.body
r.response.body
r.env.response.body
# or
r = connection.get '/'
r.body
r.response.body
r.env.response.body
Как правильно получить тело?
Замечания:
В браузере я получаю доступ https: //henry.php непосредственно и браузер запрашивает у меня окно с моим именем пользователя и паролем, и я ввожу их, и я вижу содержимое — я вижу, что у меня есть правильные данные, и это должно работать (это потому, что браузер знает, как выполнить базовую аутентификацию), но Я просто не могу понять, как сделать это в коде, используя Фарадей.
Отвечая на мой собственный вопрос:
Вместо просто:
connection = Faraday.new(url: url) do |conn|
conn.basic_auth(username, password)
end
Не забывайте использовать адаптер:
connection = Faraday.new(url: url) do |conn|
conn.adapter Faraday.default_adapter # make requests with Net::HTTP
conn.basic_auth(username, password)
end
поскольку Фарадей — это интерфейс, он не выполняет фактическую работу по созданию соединения и запроса, адаптер делает это, поэтому он вам нужен для его работы.
Затем, чтобы получить нужное тело ответа, вы можете просто:
response = connection.get
response.body
Других решений пока нет …