如何使用 ruby​​ Faraday gem 执行以下 curl 请求?

Posted

技术标签:

【中文标题】如何使用 ruby​​ Faraday gem 执行以下 curl 请求?【英文标题】:How to perform the following curl request using the ruby Faraday gem? 【发布时间】:2017-04-14 03:11:09 【问题描述】:

这是我要执行的 curl 请求:

curl --request GET --url 'https://us8.api.mailchimp.com/3.0/' --user 'anystring:<apikey>'

从命令行运行这个 curl 命令,我得到了一堆 JSON,这正是我想要的。

我正在尝试使用法拉第执行相同的请求。这是我尝试过的:

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?

【问题讨论】:

【参考方案1】:

这最终对我有用:

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

【讨论】:

【参考方案2】:

这是使用 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

【讨论】:

【参考方案3】:

更简洁的选项是将您的凭据手动编码为 Base64 并手动设置 Authorization 标头。这样可以节省几行代码,并使其保持与常规法拉第请求类似的格式(即Faraday.post &lt;URL&gt;, &lt;BODY&gt;, &lt;HEADERS&gt;)。

encoded_credentials = Base64.encode64('apikey:api_secret').chomp
Faraday.post 'http://myhost.local/my_url', , authorization: "Basic #encoded_credentials"

【讨论】:

以上是关于如何使用 ruby​​ Faraday gem 执行以下 curl 请求?的主要内容,如果未能解决你的问题,请参考以下文章

非常基本的脚本上哈希的奇数列表[关闭]

Faraday::ConnectionFailed, Connection denied - connect(2) for “localhost” port 9200 Error Ruby on Ra

Could not find ‘json‘ (>= 1.5.1) among 45 total gem(s)

Could not find ‘json‘ (>= 1.5.1) among 45 total gem(s)

Ruby:如何安装特定版本的 ruby​​ gem?

ruby ide的gem包如何安装