2016-07-31 6 views
0

Я пишу оболочку Ruby для API JSON. Я ожидаю определенного типа ответа, когда успешная почта отправляется в эту конечную точку ... но я не уверен, как получить ответ.Как проверить ответ от Фарадея?

Я использую Фарадей, как это:

@connection ||= Faraday.new do |f| 
    f.url_prefix = "https://myapiurl.com/api/auth" 
    f.adapter :net_http 

    f.headers['User-Agent'] = "Some-Awesome-User-Agent" 
    f.headers['Content-Type'] = content_type 
    f.headers['Accept'] = api_version 
    f.params['API-KEY'] = api_key if api_key 

    f.response :json, content_type: /\bjson$/ 
    end 

Однако, когда я @connection.post, я получаю сообщение об ошибке SSL:

@connection.post 
Faraday::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed 

Если я не ошибаюсь, когда-то я могу исправить Ошибка SSL, я должен получить некоторый объект ответа, который затем могу действовать правильно?

Edit 1

Я использую OpenSSL 0.9.8zh 14 Jan 2016, также ruby 2.3.1, наряду с rvm 1.27.0 (latest)

Это то, что мой Gemfile.lock выглядит следующим образом:

PATH 
    remote: . 
    specs: 
    mygem (0.1.0) 

GEM 
    remote: https://rubygems.org/ 
    specs: 
    coderay (1.1.1) 
    diff-lcs (1.2.5) 
    faraday (0.9.2) 
     multipart-post (>= 1.2, < 3) 
    faraday_middleware (0.10.0) 
     faraday (>= 0.7.4, < 0.10) 
    json (2.0.2) 
    method_source (0.8.2) 
    multipart-post (2.0.0) 
    pry (0.10.4) 
     coderay (~> 1.1.0) 
     method_source (~> 0.8.1) 
     slop (~> 3.4) 
    rake (10.5.0) 
    rspec (3.5.0) 
     rspec-core (~> 3.5.0) 
     rspec-expectations (~> 3.5.0) 
     rspec-mocks (~> 3.5.0) 
    rspec-core (3.5.1) 
     rspec-support (~> 3.5.0) 
    rspec-expectations (3.5.0) 
     diff-lcs (>= 1.2.0, < 2.0) 
     rspec-support (~> 3.5.0) 
    rspec-mocks (3.5.0) 
     diff-lcs (>= 1.2.0, < 2.0) 
     rspec-support (~> 3.5.0) 
    rspec-support (3.5.0) 
    slop (3.6.0) 

PLATFORMS 
    ruby 

DEPENDENCIES 
    bundler (~> 1.11) 
    faraday (~> 0.9.2) 
    faraday_middleware (~> 0.10.0) 
    json (~> 2.0, >= 2.0.2) 
    mygem 
    pry (~> 0.10.4) 
    rake (~> 10.0) 
    rspec (~> 3.0) 
    rspec-expectations (~> 3.5) 

BUNDLED WITH 
    1.12.5 

ответ

1

Вы получаете эту ошибку, потому что ваш SSL сертификат не подписывается доверенным центром сертификации (CA) или вообще не подписан. Вы можете передать опцию {ssl: {verify: false}} на номер Faraday.new, чтобы заставить ее пропустить проверку CA.

@connection ||= Faraday.new(ssl: {verify: false}) do |f| 
    # ... 
end 

Это нормально для тестирования собственного веб-API, прежде чем покупать SSL сертификат, но не делают этого при вызове API, кроме вашей собственной, потому что без СА, вы никогда не можете сказать, является ли серт этого сайта является подделкой.