由于法拉第没有文件,我无法在任何地方找到它.什么是"超时"以及法拉第中的"开启超时"?
我在 Heroku 上托管了 Rails API 服务器,它向客户端初始 API 请求中指定的回调 url 发出异步 POST 请求。
当我尝试通过 SSL POST 到我的客户之一的 web 应用程序时遇到问题。
connection = Faraday::Connection.new('https://subdomain.some_client.com', ssl: { ca_file: '/usr/lib/ssl/certs/ca-certificates.crt' })
connection.get '/test'
Run Code Online (Sandbox Code Playgroud)
以下抛出错误:
Faraday::Error::ConnectionFailed: SSL_connect returned=1 errno=0 state=error: certificate verify failed
Run Code Online (Sandbox Code Playgroud)
但是,如果我通过 HTTPS 发布到另一台服务器,例如谷歌,它工作正常
connection = Faraday::Connection.new('https://www.google.com', ssl: { ca_file: '/usr/lib/ssl/certs/ca-certificates.crt' })
connection.get '/'
Run Code Online (Sandbox Code Playgroud)
这是否意味着错误出在客户端的 SSL 配置上?如果是这样,我如何帮助他们调试问题?
更新:
我可以毫无问题地将 POST 卷曲到客户端的 web 应用程序,只有当我通过 ruby 的 HTTP 库执行它时才会失败
非常感谢谢谢
我是ruby的新手,我正在尝试执行一个规范并收到此错误:
RuntimeError :: json未在Faraday :: Request上注册
我正在尝试使用这个gem:https: //github.com/Chicago/windy
Mac OS X 10.7.4 Ruby 1.9.3,使用RVM
谢谢
对不起标题,我太沮丧了,现在想出更好的东西.
我有一个类,Judge它有一个方法#stats.该stats方法应该向api发送GET请求并获取一些数据作为响应.我正在尝试测试这个并存根stats方法,以便我不执行实际请求.这是我的测试看起来像:
describe Judge do
describe '.stats' do
context 'when success' do
subject { Judge.stats }
it 'returns stats' do
allow(Faraday).to receive(:get).and_return('some data')
expect(subject.status).to eq 200
expect(subject).to be_success
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
这是我正在测试的课程:
class Judge
def self.stats
Faraday.get "some-domain-dot-com/stats"
end
end
Run Code Online (Sandbox Code Playgroud)
这当前给了我错误:Faraday does not implement: get
那你如何用法拉第存根?我见过的方法如下:
stubs = Faraday::Adapter::Test::Stubs.new do |stub|
stub.get('http://stats-api.com') { [200, {}, 'Lorem ipsum'] }
end
Run Code Online (Sandbox Code Playgroud)
但我似乎无法以正确的方式应用它.我在这里错过了什么?
目前我正在开发rails 4项目,现在我必须链接/连接另一个应用程序(不是用于访问API的sso),例如example.com.(注意: example.com使用3脚oauth安全架构)
搜索后发现我必须实施omniouth策略.
为此,我已经审阅了这个链接.根据策略 - 贡献指南, 我能够完成设置和请求阶段,您可以在这里找到我的示例代码.
require 'multi_json'
require 'omniauth/strategies/oauth2'
require 'uri'
module OmniAuth
module Strategies
class MyAppStrategy < OmniAuth::Strategies::OAuth2
option :name, 'my_app_strategy'
option :client_options, {
site: site_url,
authorize_url: authorize_url,
request_url: request_url,
token_url: token_url,
token_method: :post,
header: { Accept: accept_header }
}
option :headers, { Accept: accept_header }
option :provider_ignores_state, true
def consumer
binding.pry
::OAuth::Consumer.new(options.client_id, options.client_secret, options.client_options)
end
def request_phase # rubocop:disable MethodLength
binding.pry
request_token = consumer.get_request_token({:oauth_callback => callback_url}, options.request_params)
session["oauth"] …Run Code Online (Sandbox Code Playgroud) 我一整天都试图解决这个问题,这让我发疯了.
我有两个rails应用程序,ServerApp和ClientApp.ClientApp使用Her gem通过API从ServerApp获取数据.在我需要分页信息之前,一切都很棒.
这是我用来获取订单的方法(这使用kamainari进行分页和搜索搜索):
# ServerApp
def search
@search = Order.includes(:documents, :client).order('id desc').search(params[:q])
@orders = @search.result(distinct: true).page(params[:page]).per(params[:per])
respond_with @orders.as_json(include: :documents)
end
Run Code Online (Sandbox Code Playgroud)
它在json中返回一个哈希数组,Her用作订单的集合.这很好.
# Response
[
{
"client_id": 239,
"created_at": "2013-05-15T15:37:03-07:00",
"id": 2422,
"ordered_at": "2013-05-15T15:37:03-07:00",
"origin": "online",
"updated_at": "2013-05-15T15:37:03-07:00",
"documents": [
{ ... }
]
},
...
]
Run Code Online (Sandbox Code Playgroud)
但我需要分页信息.看起来我需要将其作为元数据发送给我的json.所以我改变了对此的回应:
respond_to do |format|
format.json do
render json: { orders: @orders.as_json(include: :documents), metadata: 'sent' }
end
end
Run Code Online (Sandbox Code Playgroud)
这确实发送了元数据,因此在我的ClientApp中,我可以编写@ orders.metadata并获取'sent'.但现在我的命令嵌套在'orders'中的数组中,所以我需要使用@ orders.orders,然后它将它视为数组而不是Her系列.
在做了一些阅读后,似乎通过标题发送分页信息是很多其他人这样做的方式(我能够使用本指南在after_filter中设置标题).但是我对如何在我的ClientApp中获取这些响应标头更加迷茫 - 我相信我需要一个法拉第中间件,但我只是没有运气让它工作.
如果有人知道我怎么能完成这件事,我将非常感激.我不能再花一天时间把头撞在墙上,但我觉得我只是解决这个问题的一个重要信息!
为什么有人会直接使用Net :: HTTP来使用法拉第宝石?使用这样的包装有什么好处?
我正在为我的rails应用程序编写测试.我只想看到'.' 当rspec运行时,和'*'符号.但我正在观看HTTP日志,不知道如何禁用它们.我终端输出的一块rspec:
.............get http://0.0.0.0:3000/device_info/?api_session=%23%7Bapi_session%7D
User-Agent: "Faraday v0.8.7"
404
content-type: "text/html"
x-cascade: "pass"
connection: "close"
server: "thin 1.5.1 codename Straight Razor"
.....get http://0.0.0.0:3000/device_info/12345?api_session=%23%7Bapi_session%7D
User-Agent: "Faraday v0.8.7"
400
..
Run Code Online (Sandbox Code Playgroud)
我假设原因可能是'法拉第'宝石的配置.如何从我的rspec输出中禁用此日志?
我正在寻找法拉第中间件的一个例子,它处理请求上的http(状态代码)错误以及网络超时.
在阅读了Faraday及其中间件的文档后,我的理解是这是中间件的用例之一......我只是不知道实现应该是什么样子.
谢谢
我有以下代码
conn = Faraday.new(:url => 'http://www.mapquestapi.com') do |faraday|
faraday.response :logger # log requests to STDOUT
faraday.adapter Faraday.default_adapter # make requests with Net::HTTP
faraday.options.params_encoder = Faraday::FlatParamsEncoder
end
response = conn.get do |req|
req.url '/geocoding/v1/batch'
req.params['key'] = 'xxxxx%7xxxxxxxxx%2xxxx%3xxxx-xxxx'
req.params['location'] = addresses[0]
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,关键 PARAM编码为显示在日志中这样的关键= XXXXX%257xxxxxxxxx%252xxxx%253xxxx-XXXX,造成了Mapquest服务API响应与无效键(由于编码,因为我与邮差试图和它的工作原理)
I, [2014-01-22T19:16:17.949640 #93669] INFO -- : get http://www.mapquestapi.com/geocoding/v1/batch?key=xxxxx%257xxxxxxxxx%252xxxx%253xxxx-xxxx&location=1047+East+40th+Avenue%2C+Vancouver%2C+BC+V5W+1M5%2C+Canada
D, [2014-01-22T19:16:17.949778 #93669] DEBUG -- request: User-Agent: "Faraday v0.9.0"
accept-encoding: ""
I, [2014-01-22T19:16:19.038914 #93669] INFO -- Status: 200
D, [2014-01-22T19:16:19.039043 #93669] DEBUG -- response: server: "Apache-Coyote/1.1" …Run Code Online (Sandbox Code Playgroud)