Exemplo n.º 1
0
def invalidate_token(token, reactor=None):
    if reactor is None:
        from twisted.internet import reactor
    headers = {
        'authorization': [token],
        'content-type': ['application/json'],
        'User-Agent': [__user_agent__]
    }
    payload = {
        'token': token
    }
    payload = json.dumps(payload)

    d = Agent(reactor).request(
        method='POST',
        uri='https://discordapp.com/api/auth/logout',
        headers=Headers(headers),
        bodyProducer=StringProducer(payload))

    def cbResponse(body, response):
        if response.code != 200 and response.code != 204:
            raise HTTPError('Unexpected response from server ({response.code})'.format(response=response))

    def cbWriteBody(response):
        d = defer.Deferred()
        response.deliverBody(SimpleReceiver(d))
        d.addCallback(cbResponse, response)
        return d

    d.addCallback(cbWriteBody)
    return d
Exemplo n.º 2
0
def getFile(reactor, url, filename, ioHandler, progress):
    """
    Download file is similar to web.client.getPage except it is able
    the progress of the download in real time.

    :param reactor: the reactor being used by the system
    :param url: the url where the file is located
    :param filename: the filename to write the file to.
    :param ioHandler: an object that performs open, write, close on file-
                      like objects.
    :param progress: an object to which period progress updates can be added.

    :returns: a deferred object.
    """
    d = Agent(reactor).request("GET", url, Headers({"User-Agent": ["Teiler"]}),
                               None)

    def cbRequest(response):
        """
        This callback fires when the response headers have been received.
        """
        finished = Deferred()
        response.deliverBody(
            FileWriter(finished, response.length, filename, ioHandler,
                       progress))
        return finished

    d.addCallback(cbRequest)
    return d
Exemplo n.º 3
0
def http_patch(endpoint, token, data, reactor=None):
    if reactor is None:
        from twisted.internet import reactor
    assert endpoint is not None
    assert data is not None
    headers = {
        'authorization': [token],
        'content-type': ['application/json'],
        'User-Agent': [__user_agent__]
    }
    payload = json.dumps(data)

    d = Agent(reactor).request(
        method='PATCH',
        uri=endpoint,
        headers=Headers(headers),
        bodyProducer=StringProducer(payload))

    def cbResponse(body, response):
        if response.code == 501:
            raise RateLimitError('Rate limited')
        elif response.code == 400:
            raise LoginError('Unable to peform operation')
        elif response.code != 200:
            raise HTTPError('Unexpected response from server ({response.code})'.format(response=response))
        return body

    def cbWriteBody(response):
        d = defer.Deferred()
        response.deliverBody(SimpleReceiver(d))
        d.addCallback(cbResponse, response)
        return d

    d.addCallback(cbWriteBody)
    return d
Exemplo n.º 4
0
def get_user_for_token(token, reactor=None):
    if reactor is None:
        from twisted.internet import reactor
    headers = {
        'authorization': [token],
        'content-type': ['application/json'],
        'User-Agent': [__user_agent__]
    }

    d = Agent(reactor).request(
        method='GET',
        uri='https://discordapp.com/api/users/@me',
        headers=Headers(headers),
        bodyProducer=None)

    def cbResponse(response):
        if response.code != 200:
            raise LoginError('Did not receive expected response from @me endpoint. ({response.code})'.format(response=response))
        d = readBody(response)
        d.addCallback(cbParseJson)
        return d

    def cbParseJson(body):
        return json.loads(body)

    d.addCallback(cbResponse)
    return d
Exemplo n.º 5
0
 def check_aggregator_website(self):
     """
     Run aggregator website test
     """
     g_logger.info("Testing Aggregator website: %s" % self.base_url)
     
     defer_ = Agent(reactor).request('GET',self.base_url,
                             Headers({'User-Agent':['ICM Website Test']}),
                             None)
     defer_.addCallback(self._handle_check_aggregator_website)    
     defer_.addErrback(self._handle_check_aggregator_website_err)
     
     return defer_
Exemplo n.º 6
0
    def request(url, method, deferred, **kwargs):
        body = None
        if kwargs:
            body = FileBodyProducer(BytesIO(json.dumps(kwargs).encode()))
        args = {
            'uri': url.encode(),
            'method': method.encode(),
            'bodyProducer': body
        }
        resp_def = Agent(reactor).request(**args)

        def get_body(response, dfd):
            response.deliverBody(_HTTPClientProtocol(dfd))

        resp_def.addCallback(get_body, deferred)
        return resp_def
Exemplo n.º 7
0
    def http_request(self, method, path, headers={}, body=None):
        url = "http://%s:%s%s" % (self.host, self.port, path)

        h = {}
        for k, v in headers.items():
            if not isinstance(v, list):
                h[k.lower()] = [v]
            else:
                h[k.lower()] = v

        # content-type must always be set
        if not 'content-type' in h.keys():
            h['content-type'] = ['application/json']

        if body:
            bodyProducer = StringProducer(body)
        else:
            bodyProducer = None

        requestAgent = Agent(reactor).request(method, str(url), Headers(h),
                                              bodyProducer)

        if self.client.request_timeout:
            # Start request timer
            t = self.client.request_timeout
            timeout = reactor.callLater(t, self.abort_request, requestAgent)

            def timeoutProxy(request):
                if timeout.active():
                    timeout.cancel()
                return self.http_response(request)

            def requestAborted(failure):
                failure.trap(defer.CancelledError,
                             error.ConnectingCancelledError)

                raise exceptions.RequestTimeout(
                    "Request took longer than %s seconds" % t)

            requestAgent.addCallback(timeoutProxy).addErrback(requestAborted)
        else:
            requestAgent.addCallback(self.http_response)

        return requestAgent
Exemplo n.º 8
0
    def getFile(self, sha_sum, file_to_write):
        """Fetch a file from the builder.

        :param sha_sum: The sha of the file (which is also its name on the
            builder)
        :param file_to_write: A file name or file-like object to write
            the file to
        :return: A Deferred that calls back when the download is done, or
            errback with the error string.
        """
        file_url = self.getURL(sha_sum)
        d = Agent(self.reactor, pool=self.pool).request("GET", file_url)

        def got_response(response):
            finished = defer.Deferred()
            response.deliverBody(FileWritingProtocol(finished, file_to_write))
            return finished

        d.addCallback(got_response)
        return d
Exemplo n.º 9
0
def task(url):
    # res = getPage(bytes(url, encoding='utf8')) # 发送Http请求
    res = Agent(bytes(url, encoding='utf8'))  # 发送Http请求
    res.addCallback(one_done)
    yield res