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

Hen*_*ang 3 php ruby basic-authentication faraday

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

url = 'https://henry.php' # note that it is a php website
username = 'foo'
password = 'bar'
Run Code Online (Sandbox Code Playgroud)

Faraday 提供基本的身份验证功能,他们的文档说我应该使用以下代码:

connection = Faraday.new(url: url) do |conn|
  conn.basic_auth(username, password)
end 
Run Code Online (Sandbox Code Playgroud)

我想获取上述网址的响应正文,以确保基本身份验证确实成功并且我可以访问内容,但我不知道如何操作。我尝试了以下每种方法,但都不起作用:

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
Run Code Online (Sandbox Code Playgroud)

获得尸体的正确方法是什么?

笔记:

在浏览器中,我直接访问https://henry.php,浏览器提示我一个框,询问我的用户名和密码,我输入它们,我可以看到内容 - 我可以看到我拥有的详细信息是正确的,它应该可以工作(这是因为浏览器知道如何进行基本身份验证),但我只是不知道如何使用 Faraday 在代码中执行此操作。

Hen*_*ang 8

回答我自己的问题:

而不仅仅是:

connection = Faraday.new(url: url) do |conn|
  conn.basic_auth(username, password)
end
Run Code Online (Sandbox Code Playgroud)

你应该记住使用适配器:

connection = Faraday.new(url: url) do |conn|
  conn.adapter Faraday.default_adapter # make requests with Net::HTTP
  conn.basic_auth(username, password)
end
Run Code Online (Sandbox Code Playgroud)

因为 Faraday 是一个接口,它不执行建立连接和请求的实际工作,适配器会执行此操作,因此您需要它才能工作。

然后,要获得您想要的响应正文,您可以:

response = connection.get
response.body
Run Code Online (Sandbox Code Playgroud)