'Actually send the request object.
:param req: The HTTPRequest object that represents the request.
:return: An HTTPResponse object.'

def send(self, req, grep=True):

    self._before_send_hook(req)
    self.assert_allowed_proto(req)
    req = self._evasion(req)
    original_url = req._Request__original
    original_url_inst = req.url_object
    try:
        res = self._opener.open(req)
    except urllib2.HTTPError as e:
        return self._handle_send_success(req, e, grep, original_url, original_url_inst)
    except (socket.error, URLTimeoutError, ConnectionPoolException, OpenSSL.SSL.SysCallError, OpenSSL.SSL.ZeroReturnError) as e:
        return self._handle_send_socket_error(req, e, grep, original_url)
    except (urllib2.URLError, httplib.HTTPException, HTTPRequestException) as e:
        return self._handle_send_urllib_error(req, e, grep, original_url)
    else:
        return self._handle_send_success(req, res, grep, original_url, original_url_inst)
