هل يدعم faraday 0.8.X عميل Typhoeus؟
دعم موافق؛)
هممم أضع:
conn = Faraday.new (url، ssl: {تحقق: خطأ}) do | builder |
builder.response: follow_redirects،: limit => 3،: Standards_compliant => false،: cookie =>: all
builder.adapter: typhoeus
نهاية
تم إرسال الطلب ولكن مع net_http!
كيف يمكنني التبديل إلى Typhoeus من em_http؟
في 0.7.X عملت التيفويوس بشكل جيد.
تتبع المكدس الخاص بي:
https://gist.github.com/3743068
لقد قمت بتعيين محول typhoeus أو em_http ، لكن في السجلات:
/home/johnbat26/.rvm/gems/ruby-1.9. 3-p194@webex/gems/faraday-0.8.4/lib/faraday/adapter/net_http.rb : 54: في 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: في 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 '
يتلقى الخادم استجابة بالحالة 503 ولكن خطأ net_http:
خطأ
طريقة غير محددة "strip" لعدم وجود : NilClass
أنت تقوم بتهيئة اتصال Faraday مثل هذا:
conn = Faraday.new(url, ssl: {verify: false}) do |builder|
builder.response :follow_redirects, :limit => 3, :standards_compliant => false, :cookie => :all
builder.adapter :typhoeus
end
يبدو على ما يرام. لكن هل تستخدم نفس الاتصال لتقديم الطلبات؟ لم تُظهر لنا الكود الذي تستخدمه في تنفيذ الطلبات باستخدام فاراداي. ربما كنت تستخدم اتصالين مختلفين من Faraday.
نصيحة: حاول استخدام follow_redirects مع الخيارات الافتراضية فقط:
builder.response :follow_redirects
أرى في وضع التصحيح أن الكائن يستخدم typhoeus المحول ، لكن في السجلات أرى net_http ؟! لماذا ا؟
أستخدم الكود التالي:
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
بعد ذلك أستدعي هذا:
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' => '""'})
أضبط:
conn.response: follow_redirects
ولا يزال الخطأ موجودًا:
استثناء
NoMethodError
خطأ
طريقة غير محددة "strip" لعدم وجود : 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'
آسف. انه خطأي.
أفعل 2 طلب ، ونسيان الطلب الثاني مع المحول الافتراضي.
مع typhoeus ، لا يظهر هذا الخطأ.
ولكن ماذا تفعل بمحول net_http وهو خطأ: أسلوب غير محدد "قطاع" لـ nil: NilClass ؟
آسف نسيت الرد على هذا. من المحتمل أنك قمت بتمرير قيمة رأس كانت لا شيء ، وكان net_http يحاول معالجة قيمة الرأس كسلسلة.
لحل هذه المشكلة ، تأكد من أن أي رأس تقوم بتمريره يحتوي بالفعل على قيمة سلسلة.
التعليق الأكثر فائدة
آسف نسيت الرد على هذا. من المحتمل أنك قمت بتمرير قيمة رأس كانت لا شيء ، وكان net_http يحاول معالجة قيمة الرأس كسلسلة.
لحل هذه المشكلة ، تأكد من أن أي رأس تقوم بتمريره يحتوي بالفعل على قيمة سلسلة.