2016-07-31 23 views
0

Ich schreibe einen Ruby-Wrapper für eine JSON-API. Ich erwarte eine bestimmte Art von Antwort, wenn ein erfolgreicher Post an diesen Endpunkt gesendet wird ... aber ich bin mir nicht sicher, wie ich die Antwort erhalten soll.Wie teste ich eine Antwort von Faraday?

Ich bin mit Faraday wie folgt aus:

@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 

Allerdings, wenn ich @connection.post tun, halte ich ein SSL-Fehler bekommen:

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

Wenn ich nicht irre, wenn ich das beheben kann SSL-Fehler, ich sollte ein Antwortobjekt erhalten, auf das ich dann richtig reagieren kann?

Edit 1

ich OpenSSL 0.9.8zh 14 Jan 2016 verwende, auch ruby 2.3.1, zusammen mit rvm 1.27.0 (latest)

Dies ist, was mein Gemfile.lock wie folgt aussieht:

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 

Antwort

1

Sie diesen Fehler erhalten, weil Ihr SSL-Zertifikat ist nicht von einer vertrauenswürdigen Zertifizierungsstelle (CA) signiert oder überhaupt nicht signiert. Sie können die Option {ssl: {verify: false}} an Faraday.new übergeben, um die CA-Verifizierung zu überspringen.

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

Das ist in Ordnung für Ihre eigenen Web-api zu testen, bevor Sie ein SSL-Zertifikat kaufen, aber dies nicht tun, wenn da kein CA-api als der eigenen Berufung, kann man nie, ob das Zertifikat dieser Website erklären ist eine Fälschung.