<p>ํŒจ๋Ÿฌ๋ฐ์ด 0.8.X์™€ ์žฅํ‹ฐํ‘ธ์Šค</p>

์— ๋งŒ๋“  2012๋…„ 09์›” 18์ผ  ยท  11์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: lostisland/faraday

ํŒจ๋Ÿฌ๋ฐ์ด 0.8.X๋Š” ์žฅํ‹ฐํ‘ธ์Šค ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๊นŒ?

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‹ต๋ณ€์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ nil์ธ ํ—ค๋” ๊ฐ’์„ ์ „๋‹ฌํ–ˆ๊ณ  net_http๋Š” ํ—ค๋” ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ „๋‹ฌํ•˜๋Š” ๋ชจ๋“  ํ—ค๋”์— ์‹ค์ œ๋กœ ๋ฌธ์ž์—ด ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋“  11 ๋Œ“๊ธ€

์ง€์› OK ;)

ํ  ๋‚ด๊ฐ€ ์„ค์ •:

conn = Faraday.new(url, ssl: {verify: false}) do |builder|
builder.response :follow_redirects, :limit => 3, :standards_compliant => false, :cookie => :all
builder.adapter : ์žฅํ‹ฐํ‘ธ์Šค
๋

์š”์ฒญ์„ ๋ณด๋ƒˆ์ง€๋งŒ net_http !
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: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 ํ˜ธ์ถœ'

์„œ๋ฒ„๋Š” ์ƒํƒœ 503์˜ ์‘๋‹ต์„ ๋ฐ›์ง€๋งŒ net_http๋Š” ์˜ค๋ฅ˜๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค.
์˜ค๋ฅ˜
nil:NilClass์— ๋Œ€ํ•œ ์ •์˜๋˜์ง€ ์•Š์€ ๋ฉ”์†Œ๋“œ `strip'

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํŒจ๋Ÿฌ๋ฐ์ด ์—ฐ๊ฒฐ์„ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

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

๋””๋ฒ„๊ทธ ๋ชจ๋“œ์—์„œ ๊ฐœ์ฒด conn์ด ์–ด๋Œ‘ํ„ฐ ์žฅํ‹ฐํ‘ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋กœ๊ทธ์—๋Š” 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
์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์™ธ
๋ฉ”์„œ๋“œ ์˜ค๋ฅ˜ ์—†์Œ
์˜ค๋ฅ˜
nil:NilClass์— ๋Œ€ํ•œ ์ •์˜๋˜์ง€ ์•Š์€ ๋ฉ”์†Œ๋“œ `strip'

/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๊ฐœ์˜ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๊ธฐ๋ณธ ์–ด๋Œ‘ํ„ฐ๋กœ ๋‘ ๋ฒˆ์งธ ์š”์ฒญ์„ ์žŠ์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค.
์žฅํ‹ฐํ‘ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ net_http ์–ด๋Œ‘ํ„ฐ๋Š” ์–ด๋–ป๊ฒŒ ํ•ฉ๋‹ˆ๊นŒ? ์˜ค๋ฅ˜: nil:NilClass์— ๋Œ€ํ•œ ์ •์˜๋˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ `strip' ?

์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ๋‹ต๋ณ€์„ ์žŠ์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ nil์ธ ํ—ค๋” ๊ฐ’์„ ์ „๋‹ฌํ–ˆ๊ณ  net_http๋Š” ํ—ค๋” ๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ์ฒ˜๋ฆฌํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์ „๋‹ฌํ•˜๋Š” ๋ชจ๋“  ํ—ค๋”์— ์‹ค์ œ๋กœ ๋ฌธ์ž์—ด ๊ฐ’์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰