Ziy*_*een 5 ruby ruby-on-rails faraday
我正在使用 OAuth2 gem 并尝试将其配置为通过代理进行调用。我遇到了这个错误Faraday::ConnectionFailed: end of file reached,并且不确定我做错了什么。我以为这是证书,但我设法Curl::Easy建立连接并发布数据。
我非常感谢您为帮助我解决此问题所做的任何努力。提前致谢。
我曾经通过收集任务来玩法拉第。
namespace :vgs do
task faraday: :environment do
Faraday.default_adapter = :net_http
ssl_cert_path = VGS.configuration.cert_path # "/path/to/sandbox.pem"
options = {
headers: { 'Content-Type' => 'application/json' },
ssl: { ca_file: ssl_cert_path },
proxy: VGS.proxy_uri, # => "https://<USERNAME>:<PASSWORD>@<VAULT>.sandbox.verygoodproxy.com:8443"
}
pp options
conn = Faraday.new(
'https://eoftqqzi7ii7mmn.m.pipedream.net',
options
)
data = {
card_number: 'tok_sandbox_sS27yztTZjuznHD1hmtgCS',
card_cvc: 'tok_sandbox_241N1r8hxoYDyqrUSmZ4ih',
card_expiration_date: '2212',
transaction_amount: 84.0
}
response = conn.post('/') do |req|
req.body = data.to_json
end
pp response
pp response.body
end
end
Run Code Online (Sandbox Code Playgroud)
运行此任务会导致以下错误:
Faraday::ConnectionFailed: end of file reached
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:146:in `request_via_request_method'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:131:in `request_with_wrapped_block'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:122:in `perform_request'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:66:in `block in call'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/adapter.rb:50:in `connection'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:64:in `call'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/request/url_encoded.rb:25:in `call'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/rack_builder.rb:154:in `build_response'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/connection.rb:516:in `run_request'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/connection.rb:281:in `post'
/Volumes/Dev/Work/Edge/edge/lib/tasks/vgs.rake:60:in `block (2 levels) in <main>'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:48:in `load'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:48:in `load'
<internal:/Users/jdeen/.rvm/rubies/ruby-3.1.1/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
<internal:/Users/jdeen/.rvm/rubies/ruby-3.1.1/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
-e:1:in `<main>'
Run Code Online (Sandbox Code Playgroud)
如果您能指出我可能做错了什么,我将不胜感激。
代理文档:https ://www.verygoodsecurity.com/docs/guides/outbound-connection
这就是 Curl::Easy 的工作原理。我使用 Curl::Easy 变体来确保它可能不是证书。
Faraday::ConnectionFailed: end of file reached
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:146:in `request_via_request_method'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:131:in `request_with_wrapped_block'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:122:in `perform_request'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:66:in `block in call'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/adapter.rb:50:in `connection'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-net_http-1.0.1/lib/faraday/adapter/net_http.rb:64:in `call'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/request/url_encoded.rb:25:in `call'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/rack_builder.rb:154:in `build_response'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/connection.rb:516:in `run_request'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/faraday-1.10.0/lib/faraday/connection.rb:281:in `post'
/Volumes/Dev/Work/Edge/edge/lib/tasks/vgs.rake:60:in `block (2 levels) in <main>'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:48:in `load'
/Users/jdeen/.rvm/gems/ruby-3.1.1/gems/bootsnap-1.10.3/lib/bootsnap/load_path_cache/core_ext/kernel_require.rb:48:in `load'
<internal:/Users/jdeen/.rvm/rubies/ruby-3.1.1/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
<internal:/Users/jdeen/.rvm/rubies/ruby-3.1.1/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
-e:1:in `<main>'
Run Code Online (Sandbox Code Playgroud)
我对 vgs 也有同样的问题,这有助于解决这个问题:
require 'faraday'
require 'typhoeus'
require 'typhoeus/adapters/faraday'
conn = Faraday.new do |faraday|
faraday.adapter :typhoeus, http_version: :httpv2_0
end
Run Code Online (Sandbox Code Playgroud)
强制 Faraday 适配器 :typhoeus 使用 HTTP/2 进行请求
另外,我在 M1 mac 上发出请求时遇到了问题,通过导出文件中的 ENV 变量解决了~/.zshrc(项目.env对我不起作用)
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
Run Code Online (Sandbox Code Playgroud)
https://github.com/rails/rails/issues/38560