Faraday: рдПрдХрд▓ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП env рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛

рдХреЛ рдирд┐рд░реНрдорд┐рдд 22 рдЕрдЧре░ 2019  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: lostisland/faraday

рдмреБрдирд┐рдпрд╛рджреА рдЬрд╛рдирдХрд╛рд░реА

  • рдлреИрд░рд╛рдбреЗ рд╕рдВрд╕реНрдХрд░рдг: 0.15.4
  • рд░реВрдмреА рд╕рдВрд╕реНрдХрд░рдг: 2.4.3

рдореБрджреЗ рдХрд╛ рд╡рд┐рд╡рд░рдг

рд╣рдо рд╕реИрдХрдбрд╝реЛрдВ рдЙрдк-рдШрдЯрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдРрдк рдЪрд▓рд╛ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдХреБрдЫ рд╣рдж рддрдХ рдлреИрд░рд╛рдбреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдШрдЯрдХ рдлреИрд░рд╛рдбреЗ рдХреЛ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ http_proxy рдЖрджрд┐ рдХреЗ рд╕рд╛рде рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВ; рд╡реЗ рдХрдиреЗрдХреНрд╢рди рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рд╕реНрдкрд╖реНрдЯ :proxy рд╕реЗрдЯрд┐рдВрдЧ рдкрд╛рд╕ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреБрдЫ рдШрдЯрдХреЛрдВ (рд▓рдЧрднрдЧ 100 рдореЗрдВ рд╕реЗ 2 рдпрд╛ 3) рдХреЛ рдмрд┐рдирд╛ рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рдлреИрд░рд╛рдбреЗ рдХрдиреЗрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо Faraday.ignore_env_proxy = true рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ, рдЕрдиреНрдпрдерд╛ рд╢реЗрд╖ ~100 рдШрдЯрдХ рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВред

рдореИрдВ рдЬреЛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рд╡рд╣ рдЙрди рдХреБрдЫ рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдлреИрд░рд╛рдбреЗ рдХрдиреЗрдХреНрд╢рди рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рди рд╣реА рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рдФрд░ рди рд╣реА рдЕрдиреНрдпрдерд╛ред

рдкреНрд░рдЬрдирди рдХреЗ рдЪрд░рдг

#752 рдХреЗ рд╕рдорд╛рди, рдпрд╣ рдПрдХ рдлреИрд░рд╛рдбреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдХрдиреЗрдХреНрд╢рди рдмрдирд╛рддреЗ рд╕рдордп рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛:

c = Faraday.new('https://www.google.com', proxy: nil)

рдореИрдВрдиреЗ рднреА рдмрд╣реБрдд рд╕реНрдорд╛рд░реНрдЯ рд╣реЛрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдПрдХ рдЦрд╛рд▓реА рд╣реИрд╢ рдХреЛ рдкреНрд░реЙрдХреНрд╕реА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд┐рдпрд╛, рдЬреИрд╕реЗ:

c = Faraday.new('https://www.google.com', proxy: {})

рд▓реЗрдХрд┐рди рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:

NoMethodError: undefined method `hostname' for nil:NilClass
from vendor/bundle/ruby/2.4.0/gems/faraday-0.15.4/lib/faraday/adapter/net_http.rb:97:in `net_http_connection'

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ (рдпрд╛ :proxy рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ "рдкреНрд░реЙрдХреНрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ" рдХрд╣рдиреЗ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛) рд╕рдорд░реНрдерд┐рдд рд╣реЛрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд▓ рдХрд░реЗрдЧрд╛ред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдУрдПрдордЬреА, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХрд╛рдордХрд╛рдЬ рд╣реИред рдЕрдм рддрдХ рд╣рдордиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдерд╛ (рдСрдХреНрдЯреЛрдХрд┐рдЯ рдХреЗ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП):

    # A Faraday middleware that throws out any configured proxy away
    # from the request environment, to make connections to GHE work
    # (those must not be proxied).
    class ProxyDroppingMiddleware < Faraday::Middleware
      def call(request_env)
        request_env[:request][:proxy] = nil
        @app.call(request_env)
      end
    end

рдФрд░ рдлрд┐рд░, рдЬрдм рдСрдХреНрдЯреЛрдХрд┐рдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖрддрд╛ рд╣реИ:

        stack = Faraday::RackBuilder.new do |builder|
          builder.use ProxyDroppingMiddleware
          # What follows is the default octokit middleware:
          builder.use Faraday::Request::Retry, exceptions: [Octokit::ServerError]
          builder.use Octokit::Middleware::FollowRedirects
          builder.use Octokit::Response::RaiseError
          builder.use Octokit::Response::FeedParser
          builder.adapter Faraday.default_adapter
        end
        options[:middleware] = stack

рдореИрдВ рдЬреЛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╡рд░реНрдХ-рдЕрд░рд╛рдЙрдВрдб рдСрдХреНрдЯреЛрдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдлреИрд░рд╛рдбреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдХреНрдЯреЛрдХрд┐рдЯ рд░реИрдкрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@ asf-stripe рдореИрдВрдиреЗ рдХрднреА рдРрд╕рд╛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ (рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕рднреА рдпрд╛ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ), рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдХрдиреЗрдХреНрд╢рди рдкреНрд░рд╛рд░рдВрдн рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдкреНрд░реЙрдХреНрд╕реА рдХреЛ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (https://github.com/lostisland/faraday/blob /рдорд╛рд╕реНрдЯрд░/рд▓рд┐рдм/рдлреИрд░рд╛рдбреЗ/рдХрдиреЗрдХреНрд╢рди.рдЖрд░рдмреА#рдПрд▓397

c = Faraday.new('https://www.google.com')
c.proxy = nil

рдпрд╣ @manual_proxy env рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдлреИрд░рд╛рдбреЗ рдХреЛ рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд▓рд┐рдП env рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ

рдУрдПрдордЬреА, рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдХрд╛рдордХрд╛рдЬ рд╣реИред рдЕрдм рддрдХ рд╣рдордиреЗ рдЬреЛ рдХрд┐рдпрд╛ рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдорд┐рдбрд▓рд╡реЗрдпрд░ рдерд╛ (рдСрдХреНрдЯреЛрдХрд┐рдЯ рдХреЗ рд╣рдорд╛рд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП):

    # A Faraday middleware that throws out any configured proxy away
    # from the request environment, to make connections to GHE work
    # (those must not be proxied).
    class ProxyDroppingMiddleware < Faraday::Middleware
      def call(request_env)
        request_env[:request][:proxy] = nil
        @app.call(request_env)
      end
    end

рдФрд░ рдлрд┐рд░, рдЬрдм рдСрдХреНрдЯреЛрдХрд┐рдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖрддрд╛ рд╣реИ:

        stack = Faraday::RackBuilder.new do |builder|
          builder.use ProxyDroppingMiddleware
          # What follows is the default octokit middleware:
          builder.use Faraday::Request::Retry, exceptions: [Octokit::ServerError]
          builder.use Octokit::Middleware::FollowRedirects
          builder.use Octokit::Response::RaiseError
          builder.use Octokit::Response::FeedParser
          builder.adapter Faraday.default_adapter
        end
        options[:middleware] = stack

рдореИрдВ рдЬреЛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ, рдорд┐рдбрд▓рд╡реЗрдпрд░ рд╡рд░реНрдХ-рдЕрд░рд╛рдЙрдВрдб рдСрдХреНрдЯреЛрдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдЕрдиреНрдпрдерд╛ рд╣рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдлреИрд░рд╛рдбреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдХреНрдЯреЛрдХрд┐рдЯ рд░реИрдкрд░ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред

рдЖрд╣ рд╣рд╛рдБ, рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдиреЗрдХреНрд╢рди рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛ (рдпрд╛ рддреЛ рдПрдХ рд░реИрдкрд░ рдпрд╛ instance_variable_get рдЬреИрд╕реА рдЪреАрдЬреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ)ред рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдкрдиреА рдкрд╣рд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП рдпрд╣реА рдорд╛рдорд▓рд╛ рдерд╛ред

рдореЗрд░реЗ рд╕реБрдЭрд╛рд╡ рдХреЛ рд╕реБрдирдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрд╕реНрдЯрдо рдорд┐рдбрд▓рд╡реЗрдпрд░ рднреА рд╣реИред
рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреВрдВрдЧрд╛ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ рдЕрднреА рднреА рдХрд┐рд╕реА рдорджрдж рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рд╕рдВрдкрд░реНрдХ рдХрд░реЗрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ryanbyon picture ryanbyon  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yusefu picture yusefu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mattmill30 picture mattmill30  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

yykamei picture yykamei  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

aleksb86 picture aleksb86  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ