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
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
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
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
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_
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
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
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
def task(url): # res = getPage(bytes(url, encoding='utf8')) # 发送Http请求 res = Agent(bytes(url, encoding='utf8')) # 发送Http请求 res.addCallback(one_done) yield res