# File lib/faraday/adapter/typhoeus.rb, line 33
      def request(env)
        method = env[:method]
        # For some reason, prevents Typhoeus from using "100-continue".
        # We want this because Webrick 1.3.1 can't seem to handle it w/ PUT.
        method = method.to_s.upcase if method == :put

        req = ::Typhoeus::Request.new env[:url].to_s,
          :method  => method,
          :body    => env[:body],
          :headers => env[:request_headers],
          :disable_ssl_peer_verification => (env[:ssl] && env[:ssl].disable?)

        configure_ssl     req, env
        configure_proxy   req, env
        configure_timeout req, env
        configure_socket  req, env

        req.on_complete do |resp|
          if resp.timed_out?
            if parallel?(env)
              # TODO: error callback in async mode
            else
              raise Faraday::Error::TimeoutError, "request timed out"
            end
          end

          case resp.curl_return_code
          when 0
            # everything OK
          when 7
            raise Error::ConnectionFailed, resp.curl_error_message
          when 60
            raise Faraday::SSLError, resp.curl_error_message
          else
            raise Error::ClientError, resp.curl_error_message
          end

          save_response(env, resp.code, resp.body) do |response_headers|
            response_headers.parse resp.headers
          end
          # in async mode, :response is initialized at this point
          env[:response].finish(env) if parallel?(env)
        end

        req
      end