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

时间:2018-01-11 01:43:46

标签: php ruby http-basic-authentication faraday

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

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

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

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

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

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 个答案:

答案 0 :(得分: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

因为Faraday是一个接口,它不会做连接和请求的实际工作,适配器会这样做,所以你需要它才能工作。

然后,为了获得你想要的反应体,你可以:

response = connection.get
response.body
相关问题