Unterstützt faraday 0.8.X den Typhoeus-Client?
Unterstützung OK ;)
Hm ich habe eingestellt:
conn = Faraday.new(url, ssl: {verify: false}) do |builder|
builder.response :follow_redirects, :limit => 3, :standards_compliant => false, :cookie => :all
builder.adapter :typhoeus
Ende
Anfrage gesendet aber mit net_http !
Wie kann ich zu Typhoeus von em_http wechseln?
In 0.7.X hat Typhoeus gut funktioniert.
Mein Stacktrace:
https://gist.github.com/3743068
Ich habe Typhoeus- oder em_http-Adapter eingestellt, aber in Protokollen:
/home/johnbat26/.rvm/gems/ruby-1.9. 3-p194@webex/gems/faraday-0.8.4/lib/faraday/adapter/net_http.rb :54:in new'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday-0.8.4/lib/faraday/adapter/net_http.rb:54:in
create_request'
/home/johnbat26/.rvm/gems/ruby-1.9. 3-p194@webex/gems/faraday-0.8.4/lib/faraday/adapter/net_http.rb :74:in perform_request'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday-0.8.4/lib/faraday/adapter/net_http.rb:37:in
Aufruf'
Server-Antwort mit Status 503, aber net_http-Fehler:
Fehler
undefinierte Methode `strip' für nil:NilClass
Sie initialisieren eine Faraday-Verbindung wie folgt:
conn = Faraday.new(url, ssl: {verify: false}) do |builder|
builder.response :follow_redirects, :limit => 3, :standards_compliant => false, :cookie => :all
builder.adapter :typhoeus
end
Es sieht in Ordnung aus. Aber verwenden Sie dieselbe Verbindung, um Anfragen zu stellen? Sie haben uns keinen Code gezeigt, mit dem Sie Anfragen mit Faraday ausführen. Vielleicht verwenden Sie zwei verschiedene Faraday-Verbindungen.
Tipp: Versuchen Sie es mit follow_redirects nur mit Standardoptionen:
builder.response :follow_redirects
Ich sehe im Debug-Modus, dass Objekt-Conn-Adapter typhoeus verwenden, aber in Protokollen sehe ich net_http?! Wieso den?
Ich benutze den nächsten Code:
require 'faraday'
require 'faraday_middleware'
require 'em-http'
require 'typhoeus'
module MediationHelper
# Parameters:
# url = args[:url]
# method = args[:method] || :post
# adapter = args[:adapter] || :net_http
# body = args[:body] || ""
# params = args[:params]
# authentication = args[:auth]
# headers = args[:headers] || {'Content-Type' => 'text/xml; charset=utf-8'}
# timeout = args[:timeout] || 60
# open_timeout = args[:open_timeout] || 60
#
def self.send_http_request(args)
url = args[:url]
method = args[:method] || :post
adapter = args[:adapter] || :net_http
params = args[:params]
body = args[:body] || ""
authentication = args[:auth]
headers = args[:headers] || {'Content-Type' => 'text/xml; charset=utf-8'}
timeout = args[:timeout] || 60
open_timeout = args[:open_timeout] || 60
conn = Faraday.new(url, ssl: {verify: false}) do |conn|
conn.response :follow_redirects
conn.adapter adapter
end
conn.basic_auth(args[:username], args[:password]) if authentication
response = conn.send(method) do |req|
req.headers.update headers
req.body = body
req.params = params if params
req.options = {
:timeout => timeout, # open/read timeout Integer in seconds
:open_timeout => open_timeout, # read timeout Integer in seconds
}
end
response
end
end
Als nächstes rufe ich das auf:
response_for_login_request = MediationHelper.send_http_request(:url => url,
:body => login_request_xml,
:adapter => :typhoeus
:headers => {'Content-Type' => "text/xml; charset=utf-8",
'Cookie' => my__cookie,
'SOAPAction' => '""'})
Ich setze:
conn.response :follow_redirects
und bekomme immer noch Fehler:
Ausnahme
NoMethodError
Fehler
undefinierte Methode `strip' für nil:NilClass
/home/johnbat26/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1435:in `block in initialize_http_header'
/home/johnbat26/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1433:in `each'
/home/johnbat26/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1433:in `initialize_http_header'
/home/johnbat26/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/http.rb:1862:in `initialize'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday-0.8.4/lib/faraday/adapter/net_http.rb:54:in `new'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday-0.8.4/lib/faraday/adapter/net_http.rb:54:in `create_request'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday-0.8.4/lib/faraday/adapter/net_http.rb:74:in `perform_request'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday-0.8.4/lib/faraday/adapter/net_http.rb:37:in `call'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday_middleware-0.8.8/lib/faraday_middleware/response/follow_redirects.rb:76:in `perform_with_redirection'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday_middleware-0.8.8/lib/faraday_middleware/response/follow_redirects.rb:65:in `call'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday-0.8.4/lib/faraday/connection.rb:226:in `run_request'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/faraday-0.8.4/lib/faraday/connection.rb:99:in `post'
/home/coding/projects/idea_projects/tsp-bwks-mediation/app/helpers/mediation_helper.rb:50:in `send_http_request'
/home/coding/projects/idea_projects/tsp-bwks-mediation/app/helpers/broadworks_helper.rb:81:in `authenticate'
/home/coding/projects/idea_projects/tsp-bwks-mediation/app/helpers/broadworks_helper.rb:121:in `init_broadworks_session'
/home/coding/projects/idea_projects/tsp-bwks-mediation/app/jobs/webex_requests_job.rb:24:in `block in perform'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/nokogiri-1.5.5/lib/nokogiri/xml/node_set.rb:239:in `block in each'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/nokogiri-1.5.5/lib/nokogiri/xml/node_set.rb:238:in `upto'
/home/johnbat26/.rvm/gems/ruby-1.9.3-p194@webex/gems/nokogiri-1.5.5/lib/nokogiri/xml/node_set.rb:238:in `each'
/home/coding/projects/idea_projects/tsp-bwks-mediation/app/jobs/webex_requests_job.rb:18:in `perform'
Es tut uns leid. Es ist mein Fehler.
Ich mache 2 Anfragen und vergesse die zweite Anfrage mit dem Standardadapter.
Bei Typhus tritt dieser Fehler nicht auf.
Aber was tun mit dem net_http-Adapter und dem Fehler: undefinierte Methode `strip' für nil:NilClass ?
Entschuldigung, dass ich vergessen habe, darauf zu antworten. Sie haben wahrscheinlich einen Header-Wert übergeben, der nil war, und net_http hat versucht, den Header-Wert als String zu verarbeiten.
Um dies zu umgehen, stellen Sie sicher, dass jeder übergebene Header tatsächlich einen Zeichenfolgenwert hat.
Hilfreichster Kommentar
Entschuldigung, dass ich vergessen habe, darauf zu antworten. Sie haben wahrscheinlich einen Header-Wert übergeben, der nil war, und net_http hat versucht, den Header-Wert als String zu verarbeiten.
Um dies zu umgehen, stellen Sie sicher, dass jeder übergebene Header tatsächlich einen Zeichenfolgenwert hat.