如何使用 ruby 法拉第 gem 执行以下 curl 请求?
How to perform the following curl request using the ruby Faraday gem?
这是我要执行的 curl 请求:
curl --request GET --url 'https://us8.api.mailchimp.com/3.0/' --user 'anystring:<apikey>'
运行命令行下的这个curl命令,我得到一堆JSON,这就是我想要的
我正在尝试使用 Faraday 执行相同的请求。这是我试过的:
conn = Faraday.new "https://us8.api.mailchimp.com/3.0/" do |faraday|
faraday.adapter Faraday.default_adapter
end
conn.basic_auth('apikey', <apikey>)
response = conn.get
puts response.body # => "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>301 Moved Permanently</title>\n</head>...
如何获得 JSON 而不是我在 response.body
中看到的 html?
这最终对我有用:
conn = Faraday.new('https://us8.api.mailchimp.com/3.0/') do |c|
c.use FaradayMiddleware::ParseJson, content_type: "application/json"
c.use Faraday::Adapter::NetHttp
end
conn.basic_auth('apikey', <api_key>)
response = conn.get('campaigns')
puts response # => json blob
这是使用 ruby gem.
进行 curl 操作的 farday 代码
def contacts
response = JSON.parse(params)
@conn = Faraday.new('https://domain.example.com/api/v2/') do |farday|
farday.use FaradayMiddleware::ParseJson, content_type: "application/json"
farday.use Faraday::Adapter::NetHttp
end
@conn.basic_auth('apikey', <your_api_key>)
response = @conn.get('contacts')
puts response
render :json => {"success" => true}
end
一个更简洁的选择是手动将您的凭据编码为 Base64 并手动设置 Authorization
header。这节省了几行代码,并保持与常规法拉第请求类似的格式(即 Faraday.post <URL>, <BODY>, <HEADERS>
)。
即
encoded_credentials = Base64.encode64('apikey:api_secret').chomp
Faraday.post 'http://myhost.local/my_url', {}, authorization: "Basic #{encoded_credentials}"
这是我要执行的 curl 请求:
curl --request GET --url 'https://us8.api.mailchimp.com/3.0/' --user 'anystring:<apikey>'
运行命令行下的这个curl命令,我得到一堆JSON,这就是我想要的
我正在尝试使用 Faraday 执行相同的请求。这是我试过的:
conn = Faraday.new "https://us8.api.mailchimp.com/3.0/" do |faraday|
faraday.adapter Faraday.default_adapter
end
conn.basic_auth('apikey', <apikey>)
response = conn.get
puts response.body # => "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>301 Moved Permanently</title>\n</head>...
如何获得 JSON 而不是我在 response.body
中看到的 html?
这最终对我有用:
conn = Faraday.new('https://us8.api.mailchimp.com/3.0/') do |c|
c.use FaradayMiddleware::ParseJson, content_type: "application/json"
c.use Faraday::Adapter::NetHttp
end
conn.basic_auth('apikey', <api_key>)
response = conn.get('campaigns')
puts response # => json blob
这是使用 ruby gem.
进行 curl 操作的 farday 代码 def contacts
response = JSON.parse(params)
@conn = Faraday.new('https://domain.example.com/api/v2/') do |farday|
farday.use FaradayMiddleware::ParseJson, content_type: "application/json"
farday.use Faraday::Adapter::NetHttp
end
@conn.basic_auth('apikey', <your_api_key>)
response = @conn.get('contacts')
puts response
render :json => {"success" => true}
end
一个更简洁的选择是手动将您的凭据编码为 Base64 并手动设置 Authorization
header。这节省了几行代码,并保持与常规法拉第请求类似的格式(即 Faraday.post <URL>, <BODY>, <HEADERS>
)。
即
encoded_credentials = Base64.encode64('apikey:api_secret').chomp
Faraday.post 'http://myhost.local/my_url', {}, authorization: "Basic #{encoded_credentials}"