如何使用Faraday访问受基本身份验证保护的页面?

问题描述 投票:1回答:1

我有一个我想访问的php页面,该页面受基本身份验证保护。我知道网址和用户名/密码,它们在下面的代码中列出:

url = 'https://henry.php' # note that it is a php website
username = 'foo'
password = 'bar'

法拉第提供基本的auth功能,their doc说我应该使用以下代码:

connection = Faraday.new(url: url) do |conn|
  conn.basic_auth(username, password)
end 

我想得到上面url的响应主体,以确保基本auth确实成功,我可以访问内容,但我不知道如何。我尝试了以下各种方法,但没有一种方法可行:

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,浏览器提示我一个问我的用户名和密码的框,我输入它们,我可以看到内容 - 我可以看到我的详细信息是正确的,它应该工作(这是因为浏览器知道如何做基本身份验证),但我无法弄清楚如何使用法拉第在代码中执行此操作。

php ruby http-basic-authentication faraday
1个回答
2
投票

回答我自己的问题:

而不仅仅是:

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
© www.soinside.com 2019 - 2024. All rights reserved.