Как получить доступ к странице, защищенной базовой аутентификацией, используя Фарадей?

У меня есть 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 непосредственно и браузер запрашивает у меня окно с моим именем пользователя и паролем, и я ввожу их, и я вижу содержимое — я вижу, что у меня есть правильные данные, и это должно работать (это потому, что браузер знает, как выполнить базовую аутентификацию), но Я просто не могу понять, как сделать это в коде, используя Фарадей.

1

Решение

Отвечая на мой собственный вопрос:

Вместо просто:

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
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]