如何使用法拉第访问受basic auth保护的页面?
How to access the page protected by basic auth using Faraday?
我有一个要访问的 php 页面,该页面受基本身份验证保护。我知道 url 和 username/password,它们在下面的代码中列出:
url = 'https://henry.php' # note that it is a php website
username = 'foo'
password = 'bar'
Faraday提供基本的auth功能,their doc说我应该使用下面的代码:
connection = Faraday.new(url: url) do |conn|
conn.basic_auth(username, password)
end
我想得到上面url的响应body,以确保基本身份验证确实成功并且我可以访问内容,但我不知道如何。我尝试了以下每种方法,但其中 none 有效:
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
获得 body 的正确方法是什么?
注:
在浏览器中,我直接访问 https://henry.php,浏览器提示我一个询问我的用户名和密码的框,我输入它们,我可以看到内容 - 我可以看到我拥有的详细信息是正确的,应该工作(这是因为浏览器知道如何进行基本身份验证),但我只是不知道如何使用 Faraday 在代码中进行。
回答我自己的问题:
而不只是:
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
Faraday gem 带有许多插件(中间件),它们使 HTTP 请求更简单且更可定制。在 Ruby 中,基本身份验证可能很困难。一起来看看吧;
require "faraday"
request_helper = Faraday.new(url: 'example.com') do |builder|
builder.use Faraday::Request::BasicAuthentication, client_key, secret_key
end
# you make HTTP requests using `request_helper` since basic auth is configured
response = request_helper.get('/myendpoit')
在使用 API 例如 Stripe API 时,您必须通过证明客户端密钥和秘密密钥来获取令牌。我们可以将客户端密钥和秘密密钥作为 Faraday::Request::BasicAuthentication 中间件的输入,以使用与以前相同的方法建立基本身份验证。
我有一个要访问的 php 页面,该页面受基本身份验证保护。我知道 url 和 username/password,它们在下面的代码中列出:
url = 'https://henry.php' # note that it is a php website
username = 'foo'
password = 'bar'
Faraday提供基本的auth功能,their doc说我应该使用下面的代码:
connection = Faraday.new(url: url) do |conn|
conn.basic_auth(username, password)
end
我想得到上面url的响应body,以确保基本身份验证确实成功并且我可以访问内容,但我不知道如何。我尝试了以下每种方法,但其中 none 有效:
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
获得 body 的正确方法是什么?
注:
在浏览器中,我直接访问 https://henry.php,浏览器提示我一个询问我的用户名和密码的框,我输入它们,我可以看到内容 - 我可以看到我拥有的详细信息是正确的,应该工作(这是因为浏览器知道如何进行基本身份验证),但我只是不知道如何使用 Faraday 在代码中进行。
回答我自己的问题:
而不只是:
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
Faraday gem 带有许多插件(中间件),它们使 HTTP 请求更简单且更可定制。在 Ruby 中,基本身份验证可能很困难。一起来看看吧;
require "faraday"
request_helper = Faraday.new(url: 'example.com') do |builder|
builder.use Faraday::Request::BasicAuthentication, client_key, secret_key
end
# you make HTTP requests using `request_helper` since basic auth is configured
response = request_helper.get('/myendpoit')
在使用 API 例如 Stripe API 时,您必须通过证明客户端密钥和秘密密钥来获取令牌。我们可以将客户端密钥和秘密密钥作为 Faraday::Request::BasicAuthentication 中间件的输入,以使用与以前相同的方法建立基本身份验证。