2016-07-31 364 views
0

我正在爲JSON API編寫Ruby包裝器。我期待一個特定類型的響應,當一個成功的帖子被髮送到該端點時...但我不知道如何實際得到響應。我如何測試Faraday的響應?

我使用法拉第是這樣的:

@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錯誤,我應該收到一些響應對象,然後我可以採取行動嗎?

編輯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 

這是正常購買的SSL證書之前測試自己的Web API,但調用的API比你自己其他的時候不這樣做,因爲沒有一個CA,你永遠無法知道是否該網站的證書是假的。