Class: Faraday::Adapter::NetHttp

### Home Classes Methods

### In Files

- lib/faraday/adapter/net_http.rb

### Parent

Faraday::Adapter

### Methods

- #call
- #configure_ssl
- #create_request
- #net_http_connection
- #perform_request
- #ssl_cert_store
- #ssl_verify_mode
- #with_net_http_connection

### Class/Module Index

Quicksearch

- Faraday
- Faraday::Adapter
- Faraday::Adapter::EMHttp
- Faraday::Adapter::EMHttp::Manager
- Faraday::Adapter::EMHttp::Options
- Faraday::Adapter::EMSynchrony
- Faraday::Adapter::EMSynchrony::ParallelManager
- Faraday::Adapter::Excon
- Faraday::Adapter::HTTPClient
- Faraday::Adapter::NetHttp
- Faraday::Adapter::NetHttpPersistent
- Faraday::Adapter::Parallelism
- Faraday::Adapter::Patron
- Faraday::Adapter::Rack
- Faraday::Adapter::Test
- Faraday::Adapter::Test::Stub
- Faraday::Adapter::Test::Stubs
- Faraday::Adapter::Test::Stubs::NotFound
- Faraday::Adapter::Typhoeus
- Faraday::AutoloadHelper
- Faraday::ClientError
- Faraday::CompositeReadIO
- Faraday::Connection
- Faraday::ConnectionFailed
- Faraday::ConnectionOptions
- Faraday::Env
- Faraday::Error
- Faraday::FlatParamsEncoder
- Faraday::Middleware
- Faraday::MiddlewareRegistry
- Faraday::MissingDependency
- Faraday::NestedParamsEncoder
- Faraday::Options
- Faraday::ParsingError
- Faraday::ProxyOptions
- Faraday::RackBuilder
- Faraday::RackBuilder::Handler
- Faraday::RackBuilder::StackLocked
- Faraday::Request
- Faraday::Request::Authorization
- Faraday::Request::BasicAuthentication
- Faraday::Request::Instrumentation
- Faraday::Request::Instrumentation::Options
- Faraday::Request::Multipart
- Faraday::Request::Retry
- Faraday::Request::Retry::Options
- Faraday::Request::TokenAuthentication
- Faraday::Request::UrlEncoded
- Faraday::RequestOptions
- Faraday::ResourceNotFound
- Faraday::Response
- Faraday::Response::Logger
- Faraday::Response::Middleware
- Faraday::Response::RaiseError
- Faraday::SSLError
- Faraday::SSLOptions
- Faraday::TimeoutError
- Faraday::Utils
- Faraday::Utils::Headers
- Faraday::Utils::ParamsHash
- EmHttpSslPatch
- Object

No matching classes.

# Faraday::Adapter::NetHttp

### Constants

NET_HTTP_EXCEPTIONS

### Public Instance Methods

call(env) click to toggle source

    # File lib/faraday/adapter/net_http.rb, line 30
    def call(env)
      super
      with_net_http_connection(env) do |http|
        configure_ssl(http, env[:ssl]) if env[:url].scheme == 'https' and env[:ssl]

        req = env[:request]
        http.read_timeout = http.open_timeout = req[:timeout] if req[:timeout]
        http.open_timeout = req[:open_timeout]                if req[:open_timeout]

        begin
          http_response = perform_request(http, env)
        rescue *NET_HTTP_EXCEPTIONS => err
          if defined?(OpenSSL) && OpenSSL::SSL::SSLError === err
            raise Faraday::SSLError, err
          else
            raise Error::ConnectionFailed, err
          end
        end

        save_response(env, http_response.code.to_i, http_response.body || '') do |response_headers|
          http_response.each_header do |key, value|
            response_headers[key] = value
          end
        end
      end

      @app.call env
    rescue Timeout::Error => err
      raise Faraday::Error::TimeoutError, err
    end

configure_ssl(http, ssl) click to toggle source

    # File lib/faraday/adapter/net_http.rb, line 98
    def configure_ssl(http, ssl)
      http.use_ssl      = true
      http.verify_mode  = ssl_verify_mode(ssl)
      http.cert_store   = ssl_cert_store(ssl)

      http.cert         = ssl[:client_cert]  if ssl[:client_cert]
      http.key          = ssl[:client_key]   if ssl[:client_key]
      http.ca_file      = ssl[:ca_file]      if ssl[:ca_file]
      http.ca_path      = ssl[:ca_path]      if ssl[:ca_path]
      http.verify_depth = ssl[:verify_depth] if ssl[:verify_depth]
      http.ssl_version  = ssl[:version]      if ssl[:version]
    end

create_request(env) click to toggle source

    # File lib/faraday/adapter/net_http.rb, line 61
    def create_request(env)
      request = Net::HTTPGenericRequest.new            env[:method].to_s.upcase,    # request method
        !!env[:body],                # is there request body
        :head != env[:method],       # is there response body
        env[:url].request_uri,       # request uri path
        env[:request_headers]        # request headers

      if env[:body].respond_to?(:read)
        request.body_stream = env[:body]
      else
        request.body = env[:body]
      end
      request
    end

net_http_connection(env) click to toggle source

    # File lib/faraday/adapter/net_http.rb, line 90
    def net_http_connection(env)
      if proxy = env[:request][:proxy]
        Net::HTTP::Proxy(proxy[:uri].host, proxy[:uri].port, proxy[:user], proxy[:password])
      else
        Net::HTTP
      end.new(env[:url].host, env[:url].port)
    end

perform_request(http, env) click to toggle source

    # File lib/faraday/adapter/net_http.rb, line 77
    def perform_request(http, env)
      if :get == env[:method] and !env[:body]
        # prefer `get` to `request` because the former handles gzip (ruby 1.9)
        http.get env[:url].request_uri, env[:request_headers]
      else
        http.request create_request(env)
      end
    end

ssl_cert_store(ssl) click to toggle source

    # File lib/faraday/adapter/net_http.rb, line 111
    def ssl_cert_store(ssl)
      return ssl[:cert_store] if ssl[:cert_store]
      # Use the default cert store by default, i.e. system ca certs
      cert_store = OpenSSL::X509::Store.new
      cert_store.set_default_paths
      cert_store
    end

ssl_verify_mode(ssl) click to toggle source

    # File lib/faraday/adapter/net_http.rb, line 119
    def ssl_verify_mode(ssl)
      ssl[:verify_mode] || begin
        if ssl.fetch(:verify, true)
          OpenSSL::SSL::VERIFY_PEER
        else
          OpenSSL::SSL::VERIFY_NONE
        end
      end
    end

with_net_http_connection(env) click to toggle source

    # File lib/faraday/adapter/net_http.rb, line 86
    def with_net_http_connection(env)
      yield net_http_connection(env)
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.