From 06fd0cff83db2a0c98c13976ef7df2a643750a10 Mon Sep 17 00:00:00 2001 From: Laurent Ghigonis Date: Sat, 20 Apr 2013 10:15:30 +0200 Subject: brhute: move to dedicated dir --- toys/asynhttp/__init__.py | 0 toys/asynhttp/asynchttp.py | 888 ----------------- toys/asynhttp/http_evented.py | 181 ---- toys/brhute.py | 104 -- toys/brhute/brhute.py | 104 ++ toys/brhute/brhute_multitprocessing_broken.py | 121 +++ toys/brhute/brhute_threaded.py | 75 ++ toys/brhute/brhute_twisted.py | 75 ++ toys/brhute/contrib/httplib_pipelining_orig.py | 99 ++ toys/brhute/grbrute.py | 90 ++ .../profile_pphidden_async_data.txt | 1023 ++++++++++++++++++++ .../profile_pphidden_async_data_sorted.txt | 1023 ++++++++++++++++++++ toys/brhute/grequests.py | 182 ++++ toys/brhute/httplib_pipelining.py | 96 ++ toys/brhute/pphidden.py | 29 + toys/brhute/pphidden_async.py | 83 ++ toys/brhute/threaded_resolver.py | 302 ++++++ toys/brhute/twisted_http.py | 26 + toys/brhute/twisted_http_persistent.py | 39 + toys/brhute/twisted_http_simultaneous.py | 39 + toys/brhute_multitprocessing_broken.py | 121 --- toys/brhute_threaded.py | 75 -- toys/brhute_twisted.py | 75 -- toys/grbrute.py | 90 -- .../profile_pphidden_async_data.txt | 1023 -------------------- .../profile_pphidden_async_data_sorted.txt | 1023 -------------------- toys/grequests.py | 182 ---- toys/httplib_pipelining.py | 96 -- toys/pphidden.py | 29 - toys/pphidden_async.py | 83 -- toys/threaded_resolver.py | 302 ------ toys/twisted_http.py | 26 - toys/twisted_http_persistent.py | 39 - toys/twisted_http_simultaneous.py | 39 - 34 files changed, 3406 insertions(+), 4376 deletions(-) delete mode 100644 toys/asynhttp/__init__.py delete mode 100644 toys/asynhttp/asynchttp.py delete mode 100644 toys/asynhttp/http_evented.py delete mode 100644 toys/brhute.py create mode 100644 toys/brhute/brhute.py create mode 100644 toys/brhute/brhute_multitprocessing_broken.py create mode 100644 toys/brhute/brhute_threaded.py create mode 100644 toys/brhute/brhute_twisted.py create mode 100644 toys/brhute/contrib/httplib_pipelining_orig.py create mode 100644 toys/brhute/grbrute.py create mode 100644 toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt create mode 100644 toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt create mode 100644 toys/brhute/grequests.py create mode 100644 toys/brhute/httplib_pipelining.py create mode 100644 toys/brhute/pphidden.py create mode 100644 toys/brhute/pphidden_async.py create mode 100644 toys/brhute/threaded_resolver.py create mode 100644 toys/brhute/twisted_http.py create mode 100644 toys/brhute/twisted_http_persistent.py create mode 100644 toys/brhute/twisted_http_simultaneous.py delete mode 100644 toys/brhute_multitprocessing_broken.py delete mode 100644 toys/brhute_threaded.py delete mode 100644 toys/brhute_twisted.py delete mode 100644 toys/grbrute.py delete mode 100644 toys/grbrute_profiling/profile_pphidden_async_data.txt delete mode 100644 toys/grbrute_profiling/profile_pphidden_async_data_sorted.txt delete mode 100644 toys/grequests.py delete mode 100644 toys/httplib_pipelining.py delete mode 100644 toys/pphidden.py delete mode 100644 toys/pphidden_async.py delete mode 100644 toys/threaded_resolver.py delete mode 100644 toys/twisted_http.py delete mode 100644 toys/twisted_http_persistent.py delete mode 100644 toys/twisted_http_simultaneous.py (limited to 'toys') diff --git a/toys/asynhttp/__init__.py b/toys/asynhttp/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/toys/asynhttp/asynchttp.py b/toys/asynhttp/asynchttp.py deleted file mode 100644 index b5a2350..0000000 --- a/toys/asynhttp/asynchttp.py +++ /dev/null @@ -1,888 +0,0 @@ -#!/usr/bin/env python -"""Asynchronous HTTP/1.1 client library - -This module is an attempt to combine the best features of httplib with -the scalability of asynchat. - -I have pasted as much code as I could from httplib (Python 2.0) because it -is a well written and widely used interface. This may be a mistake, -because the behavior of AsynchHTTPConnection is quite different from that of -httplib.HTTPConnection - -contact: -Doug Fort -Senior Meat Manager -Downright Software LLC -http://www.dougfort.com - -Bug-fixes and extensions: -Dhruv Matani -""" -__author__=""" -Downright Software LLC -http://www.downright.com -""" -__copyright__=""" -Copyright (c) 2001 Downright Software LLC. All Rights Reserved. - -Distributed and Licensed under the provisions of the Python Open Source License -Agreement which is included by reference. (See 'Front Matter' in the latest -Python documentation) - -WARRANTIES -YOU UNDERSTAND AND AGREE THAT: - -a. YOUR USE OF THE PACKAGE IS AT YOUR SOLE RISK. THE PACKAGE IS PROVIDED ON -AN 'AS IS' AND 'AS AVAILABLE' BASIS. DOWNRIGHT EXPRESSLY DISCLAIMS ALL -WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED -TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE -AND NON-INFRINGEMENT. - -b. DOWNRIGHT MAKES NO WARRANTY THAT (1) THE PACKAGE WILL MEET YOUR -REQUIREMENTS, (2) THE PACKAGE WILL BE UNINTERRUPTED, TIMELY, SECURE, OR -ERROR-FREE, (3) THE RESULTS THAT MAY BE OBTAINED FROM THE USE OF THE PACKAGE -WILL BE ACCURATE OR RELIABLE, (4) THE OTHER MATERIAL PURCHASED OR OBTAINED BY -YOU THROUGH THE PACKAGE WILL MEET YOUR EXPECTATIONS,, AND (5) ANY ERRORS IN -THE PACKAGE WILL BE CORRECTED. - -c. ANY MATERIALS DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE -PACKAGE IS DONE AT YOUR OWN DISCRETION AND RISK AND THAT YOU WILL BE SOLELY -RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR LOSS OF DATA THAT -RESULTS FROM THE DOWNLOAD OF ANY SUCH MATERIAL. - -d. NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM -DOWNRIGHT OR THROUGH OR FROM THE PACKAGE SHALL CREATE ANY WARRANTY NOT -EXPRESSLY STATED IN THE TOS. - -LIMITATION OF LIABILITY -YOU EXPRESSLY UNDERSTAND AND AGREE THAT DOWNRIGHT SHALL NOT BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES, -INCLUDING BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, -DATA OR OTHER INTANGIBLE LOSSES (EVEN IF DOWNRIGHT HAS BEEN ADVISED OF SUCH -DAMAGES), RESULTING FROM: -(1) THE USE OR THE INABILITY TO USE THE PACKAGE; -(2) THE COST OF PROCUREMENT OF SUBSTITUTE GOODS AND SERVICES RESULTING FROM -ANY GOODS, DATA, INFORMATION OR SERVICES PURCHASED OR OBTAINED OR MESSAGES -RECEIVED OR TRANSACTIONS ENTERED INTO THROUGH OR FROM THE PACKAGE; -(3) UNAUTHORIZED ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; -(4) STATEMENTS OF CONDUCT OF ANY THIRD PARTY ON THE PACKAGE; OR -(5) ANY OTHER MATTER RELATING TO THE PACKAGE. -""" -__version__="0.20" - -import sys -import asynchat -import asyncore -import socket -import time -import string -import cStringIO -import mimetools - -HTTP_PORT = 80 -HTTPS_PORT = 443 - - -class AsyncHTTPResponse: - """ - This class attempts to mimic HTTPResponse from httplib. - The major difference is that it is NOT DYNAMIC: - All the reading has already been done - """ - def __init__(self, fp, debuglevel=0): - """ - This constructor builds everything in the response - object except the body. It expects a file object - containing the header text returned by the server - """ - self.debuglevel = debuglevel - - # we're expecting something like 'HTTP/1.1 200 OK' - self._replyline = fp.readline() - if self.debuglevel > 0: - print "reply: %s" % (self._replyline) - - replylist = string.split(self._replyline, None, 2) - - if len(replylist) == 3: - version, status, reason = replylist - elif len(replylist) == 2: - version, status = replylist - reason = "" - else: - raise BadStatusLine(self._replyline, name=str(self)) - - if version[:5] != 'HTTP/': - raise BadStatusLine(self._replyline, name=str(self)) - - try: - self.status = int(status) - except: - raise BadStatusLine(self._replyline, name=str(self)) - - self.reason = string.strip(reason) - - if version == 'HTTP/1.0': - self.version = 10 - elif version.startswith('HTTP/1.'): - self.version = 11 # use HTTP/1.1 code for HTTP/1.x where x>=1 - else: - raise UnknownProtocol(self._replyline, name=str(self)) - - self.msg = mimetools.Message(fp, 0) - if self.debuglevel > 0: - for hdr in self.msg.headers: - print "header: %s" % (string.strip(hdr)) - - self.body = None - - def __str__(self): - return "AsyncHTTPResponse %s" % (self._replyline) - - def getheader(self, name, default=None): - if self.msg is None: - raise ResponseNotReady(name=str(self)) - return self.msg.getheader(name, default) - - def getbody(self): - if self.body is None: - raise ResponseNotReady(name=str(self)) - return self.body - -_CHUNK_REQUEST_SIZE = 8192 - -_STATE_IDLE = "asynchttp._STATE_IDLE" -_STATE_CONNECTING = "asynchttp._STATE_CONNECTING" -_STATE_ACTIVE = "asynchttp._STATE_ACTIVE" -_STATE_ACCEPTING_HEADERS = "asynchttp._STATE_ACCEPTING_HEADERS" -_STATE_REQUESTING_BODY = "asynchttp._STATE_REQUESTING_BODY" -_STATE_CHUNK_START = "asynchttp._STATE_CHUNK_START" -_STATE_CHUNK_BODY = "asynchttp._STATE_CHUNK_BODY" -_STATE_CHUNK_RESIDUE = "asynchttp._STATE_CHUNK_RESIDUE" - -class AsyncHTTPConnection(asynchat.async_chat): - - _http_vsn = 11 - _http_vsn_str = 'HTTP/1.1' - - response_class = AsyncHTTPResponse - default_port = HTTP_PORT - auto_open = 0 - debuglevel = 0 - - def __init__(self, host=None, port=None): - asynchat.async_chat.__init__(self) - self.socket = None - - # overload asynchat.found_terminator with the function - # appropriate for each state - self._TERMINATOR_MAP = { - _STATE_IDLE : self._no_action, - _STATE_CONNECTING : self._no_action, - _STATE_ACTIVE: self._no_action, - _STATE_ACCEPTING_HEADERS: self._header_data, - _STATE_REQUESTING_BODY : self._body_data, - _STATE_CHUNK_START : self._chunk_start_data, - _STATE_CHUNK_BODY : self._chunk_body_data, - _STATE_CHUNK_RESIDUE : self._chunk_residue_data - } - - self.__state = None - self.__set_state(_STATE_IDLE) - - # we accumulate headers in a dictionary so the - # caller can write over the headers we supply - # (or their own headers if they want) - self._headerdict = None - self._requestfp = None - self._responsefp = None - self._chunkfp = None - - self._set_hostport(host, port) - - self._willclose = 0 - - def _set_hostport(self, host, port): - if host and port is None: - i = string.find(host, ':') - if i >= 0: - port = int(host[i+1:]) - host = host[:i] - else: - port = self.default_port - - self.host = host - self.port = port - - def set_debuglevel(self, level): - self.debuglevel = level - - def connect(self): - """ - Connect to the host and port specified in __init__. - Add ourselves to the asyncore polling group - """ - self.__set_state(_STATE_CONNECTING) - self.create_socket(socket.AF_INET, socket.SOCK_STREAM) - if self.debuglevel > 0: - print "connecting: (%s, %s)" % (self.host, self.port) - - asyncore.dispatcher.connect(self, (self.host, self.port)) - - def close(self): - """ - Close the connection to the HTTP server. - And remove ourselves from the asyncore polling group - """ - if self.debuglevel > 0: - print "asynchttp.close() (%s, %s)" % (self.host, self.port) - - self.connected = 0 - - if self.socket: - asynchat.async_chat.close(self) - - self._set_hostport(None, None) - - def send_entity(self, str): - """ - Send `str' to the server. - Actually, we just append str to the block of text to be sent - to the server when getresponse is called. - - Note: the name was changed from httplib's 'HTTPConnection.send()' - because it conflicts with asynchat - """ - if self.debuglevel > 0: - print "send_entity %s" - - self._requestfp.write(str) - - def putrequest(self, method, url): - """Send a request to the server. - - `method' specifies an HTTP request method, e.g. 'GET'. - `url' specifies the object being requested, e.g. '/index.html'. - - This function actually only starts accumulating the request: - nothing gets sent to the server until getresponse() is called. - """ - if self.debuglevel > 0: - print "putrequest %s %s" % (method, url) - - # Dhruv: Commented out the check below since it interferes with - # HTTP pipelining - """if not self.__state is _STATE_ACTIVE: - raise RequestNotReady( - "Invalid putrequest() %s" % (self.__state), - name=str(self) - ) - """ - - self._requestfp = cStringIO.StringIO() - - if not url: - url = '/' - self._requestfp.write( - '%s %s %s\r\n' % (method, url, self._http_vsn_str) - ) - - self._headerdict = {} - - if self._http_vsn == 11: - # Issue some standard headers for better HTTP/1.1 compliance - - # this header is issued *only* for HTTP/1.1 connections. more - # specifically, this means it is only issued when the client uses - # the new HTTPConnection() class. backwards-compat clients will - # be using HTTP/1.0 and those clients may be issuing this header - # themselves. we should NOT issue it twice; some web servers (such - # as Apache) barf when they see two Host: headers - self.putheader('Host', self.host) - - # note: we are assuming that clients will not attempt to set these - # headers since *this* library must deal with the - # consequences. this also means that when the supporting - # libraries are updated to recognize other forms, then this - # code should be changed (removed or updated). - - # we only want a Content-Encoding of "identity" since we don't - # support encodings such as x-gzip or x-deflate. - self.putheader('Accept-Encoding', 'identity') - - # we can accept "chunked" Transfer-Encodings, but no others - # NOTE: no TE header implies *only* "chunked" - #self.putheader('TE', 'chunked') - - # if TE is supplied in the header, then it must appear in a - # Connection header. - #self.putheader('Connection', 'TE') - - def putheader(self, header, value): - """ - Send a request header line to the server. - - For example: h.putheader('Accept', 'text/html') - We don't actually send the header here, we stick it - in a dictionary, to be sent when getresponse() is - called. If you call putheader() with a duplicate - key, it will wipe out the existing entry. - """ - if self.debuglevel > 0: - print "putheader %s: %s" % (header, value) - - self._headerdict[header] = value - - def endheaders(self): - """ - Indicate that the last header line has been sent to the server. - Actually, we just copy the header dictionary into the request - stream to be sent when getresponse() is called. - """ - if self.debuglevel > 0: - print "endheaders" - - for header, value in self._headerdict.items(): - self._requestfp.write( - '%s: %s\r\n' % (header, value) - ) - # store a blank line to indicate end of headers - self._requestfp.write('\r\n') - - def request(self, method, url, body=None, headers={}): - """ - Send a complete request to the server. - """ - if self.debuglevel > 0: - print "request" - - self._send_request(method, url, body, headers) - - def _send_request(self, method, url, body, headers): - if self.debuglevel > 0: - print "_send_request" - - self.putrequest(method, url) - - if body: - self.putheader('Content-Length', str(len(body))) - - for hdr, value in headers.items(): - self.putheader(hdr, value) - - self.endheaders() - - if body: - self.send_entity(body) - - def push_request(self): - """ - Push a single HTTP request to the server. Multiple requests can be - pushed to the server at the same time. This is called HTTP request - pipelining - """ - self.push(self._requestfp.getvalue()) - self._requestfp = None - - def pop_response(self): - """ - Fetch a single response to the first (in time) unanswered request. - The response will be available in the response variable. Save it - elsewhere and call pop_response again to fetch the next response - from the server - """ - self.__set_state(_STATE_ACCEPTING_HEADERS) - self.set_terminator("\r\n\r\n") - self._responsefp = cStringIO.StringIO() - - def getresponse(self): - """ - Get the response from the server. - This actually starts the process of sending the request - to the server. The response will be delivered in handle_response - """ - self.__set_state(_STATE_ACCEPTING_HEADERS) - - self.push(self._requestfp.getvalue()) - - self._requestfp = None - - # exit this state on a blank line - self.set_terminator("\r\n\r\n") - - self._responsefp = cStringIO.StringIO() - - def handle_connect(self): - """ - Notification from asyncore that we are connected - """ - self.__set_state(_STATE_ACTIVE) - if self.debuglevel > 0: - print "connected: (%s, %s)" % (self.host, self.port) - - def handle_close(self): - """ - Notification from asyncore that the server has closed - its end of the connection. - If auto_open is TRUE, we will attempt to reopen the - connection. - """ - if self.debuglevel > 0: - print "closed by server: (%s, %s) %s" % ( - self.host, self.port, self.__state - ) - - # 2001-03-14 djf If the server closed the connection while we're - # requesting body data, it may just be trying to tell us that - # we're done - if self.__state in [ - _STATE_REQUESTING_BODY, - _STATE_CHUNK_BODY, - _STATE_CHUNK_RESIDUE - ]: - self.found_terminator() - return - - asynchat.async_chat.handle_close(self) - - # if auto_open, attempt to reopen the connection - if AsyncHTTPConnection.auto_open and self.host: - self.connect() - - def was_handle_read (self): - - try: - data = self.recv (self.ac_in_buffer_size) - except socket.error, why: - self.handle_error() - return - - self.ac_in_buffer = self.ac_in_buffer + data - - # Continue to search for self.terminator in self.ac_in_buffer, - # while calling self.collect_incoming_data. The while loop - # is necessary because we might read several data+terminator - # combos with a single recv(1024). - - while self.ac_in_buffer: - lb = len(self.ac_in_buffer) - terminator = self.get_terminator() - if terminator is None: - # no terminator, collect it all - self.collect_incoming_data (self.ac_in_buffer) - self.ac_in_buffer = '' - elif type(terminator) == type(0): - # numeric terminator - n = terminator - if lb < n: - self.collect_incoming_data (self.ac_in_buffer) - self.ac_in_buffer = '' - self.terminator = self.terminator - lb - else: # give back the whole pizza - self.collect_incoming_data (self.ac_in_buffer) - self.ac_in_buffer = '' - self.terminator = 0 - self.found_terminator() - else: - # 3 cases: - # 1) end of buffer matches terminator exactly: - # collect data, transition - # 2) end of buffer matches some prefix: - # collect data to the prefix - # 3) end of buffer does not match any prefix: - # collect data - terminator_len = len(terminator) - index = string.find (self.ac_in_buffer, terminator) - if index != -1: - # we found the terminator - if index > 0: - # don't bother reporting the empty string (source of subtle bugs) - self.collect_incoming_data (self.ac_in_buffer[:index]) - self.ac_in_buffer = self.ac_in_buffer[index+terminator_len:] - # This does the Right Thing if the terminator is changed here. - self.found_terminator() - else: - # check for a prefix of the terminator - index = asynchat.find_prefix_at_end (self.ac_in_buffer, terminator) - if index: - if index != lb: - # we found a prefix, collect up to the prefix - self.collect_incoming_data (self.ac_in_buffer[:-index]) - self.ac_in_buffer = self.ac_in_buffer[-index:] - break - else: - # no prefix, collect it all - self.collect_incoming_data (self.ac_in_buffer) - self.ac_in_buffer = '' - - - def handle_error(self): - """ - Overload asyncore's exception handling - """ - self.__set_state(_STATE_IDLE) - asyncore.dispatcher.handle_error(self) - - def collect_incoming_data(self, data): - """ - asynchat calls this with data as it comes in - """ - if not self._responsefp: - raise UnexpectedData( - "%s '%s' '%s' '%s'" % ( - self.__state, - data, - self.get_terminator(), - self.ac_in_buffer - ), name=str(self)) - - self._responsefp.write(data) - - def _no_action(self): - """ - overload asynchat.found_terminator - This function will only be called when someone is badly confused - """ - raise UnexpectedTerminator( - "%s '%s'" % (self.__state, self.get_terminator()), - name=str(self) - ) - - def _header_data(self): - """ - overload asynchat.found_terminator for - _STATE_ACCEPTING_HEADERS - We assume that we have hit the blank line terminator after the - HTTP response headers. - """ - self._responsefp.seek(0) - self.response = self.response_class( - self._responsefp, - self.debuglevel - ) - - self._willclose = string.lower( - self.response.getheader("connection", "") - ) == "close" - - transferencoding = string.lower( - self.response.getheader("transfer-encoding", "") - ) - - # set up for getting the body - self._responsefp = cStringIO.StringIO() - - if transferencoding: - if transferencoding == "chunked": - self._chunkfp = cStringIO.StringIO() - self.set_terminator("\r\n") - self.__set_state(_STATE_CHUNK_START) - return - - raise UnknownTransferEncoding( - self.response.getheader("transfer-encoding", ""), - name=str(self) - ) - - contentlengthstr = self.response.getheader( - "content-length", None - ) - if contentlengthstr: - contentlength = int(contentlengthstr) - else: - contentlength = None - - self.set_terminator(contentlength) - self.__set_state(_STATE_REQUESTING_BODY) - - def _body_data(self): - """ - overload asynchat.found_terminator for - _STATE_REQUESTING_BODY - We assume that we have the full body text - """ - self.response.body = self._responsefp.getvalue() - self._responsefp = None - - if self._willclose: - self.close() - - self.__set_state(_STATE_ACTIVE) - - # hand off the response object to the child class - self.handle_response() - - def _get_chunk_size(self): - """ - Assume that chunkbuffer contains some text, begining with - a line containing the chunk size in hex. - """ - # 2001-03-26 djf -- kludge alert! We shouldn't have to lstrip - # here, but sometimes we get extra whitespace - splitlist = self._chunkbuffer.lstrip().split("\r\n",1) - if len(splitlist) == 1: - chunkline, self._chunkbuffer = splitlist[0], '' - else: - chunkline, self._chunkbuffer = splitlist - - i = string.find(chunkline, ';') - if i >= 0: - chunkline = chunkline[:i] # strip chunk-extensions - - try: - chunksize = string.atoi(chunkline, 16) - except: - raise InvalidChunk( - "Can't compute chunk size from '%s' '%s'" % ( - chunkline, self._chunkbuffer - )) - - if self.debuglevel > 0: - print "chunksize = '%d" % (chunksize) - - return chunksize - - def _chunk_start_data(self): - """ - overload asynchat.found_terminator for - _STATE_CHUNKED_START - Assumes we got a hit on terminator '\r\n' - """ - self._chunkbuffer = self._responsefp.getvalue() - self._chunksize = self._get_chunk_size() - if self._chunksize == 0: - if self.debuglevel > 0: - print "0 size Chunk: ending chunk processing" - self.response.body = self._chunkfp.getvalue() - self._chunkfp = None - self.set_terminator("\r\n") # was: \r\n\r\n - self._responsefp = cStringIO.StringIO() - self.__set_state(_STATE_CHUNK_RESIDUE) - return - - self.set_terminator(self._chunksize+2) - self._responsefp = cStringIO.StringIO() - self.__set_state(_STATE_CHUNK_BODY) - - def _chunk_body_data(self): - """ - overload asynchat.found_terminator for - _STATE_CHUNK_BODY - """ - self._chunkbuffer += self._responsefp.getvalue() - - while self._chunkbuffer: - chunk_plus_crlf_size = self._chunksize+2 - if len(self._chunkbuffer) > chunk_plus_crlf_size: - # DHRUV: WAS: chunkbody = self._chunkbuffer[:chunk_plus_crlf_size] - chunkbody = self._chunkbuffer[:self._chunksize] - self._chunkbuffer = self._chunkbuffer[chunk_plus_crlf_size:] - self._chunkbuffer = self._chunkbuffer.lstrip() - else: - # DHRUV: WAS: chunkbody = self._chunkbuffer - chunkbody = self._chunkbuffer[:-2] - self._chunkbuffer = '' - - self._chunkfp.write(chunkbody) - - if not self._chunkbuffer: - break - - print "SSSSSSSSSSSSXXXXXXXXXXXX" - print "LEFT: " + self._chunkbuffer - sys.exit(1) - # Dhruv: If we have some more data, we ignore it. - #if we have some text left over, we hope it's another chunk, - # but if it doesn't contain a newline, it is insufficient - if self._chunkbuffer.find("\r\n") < 0: - self._responsefp = cStringIO.StringIO() - self.set_terminator("\r\n") - self.__set_state(_STATE_CHUNK_START) - return - - self._chunksize = self._get_chunk_size() - if self._chunksize == 0: - if self.debuglevel > 0: - print "0 size Chunk: ending chunk processing" - self.response.body = self._chunkfp.getvalue() - self._chunkfp = None - - # if there's still something in the buffer, - # assume it's the chunk residue (probably just - # '\r\n' - if self._chunkbuffer: - self._chunkbuffer = "" # discard the residue - self.__set_state(_STATE_ACTIVE) - - if self._willclose: - self.close() - - # hand off the response object to the child class - self.handle_response() - return - - # we've handled the whole chunk, but the server could - # send entity headers. It should at least send - # a final '\r\n' - self.set_terminator("\r\n\r\n") - self._responsefp = cStringIO.StringIO() - self.__set_state(_STATE_CHUNK_RESIDUE) - return - - # We have a nonzero chunksize, if we have less than - # the specified number of bytes in the buffer, we need - # to read some more - chunk_plus_crlf_size = self._chunksize+2 - bufsize = len(self._chunkbuffer) - if bufsize < chunk_plus_crlf_size: - self.set_terminator(chunk_plus_crlf_size - bufsize) - self._responsefp = cStringIO.StringIO() - self.__set_state(_STATE_CHUNK_BODY) - return - - # if we made it this far, we should have a chunk size and - # at least enough in the buffer to satisfy it. So we loop - # back to the top of the while. - - # we don't have any text left over, but we haven't hit a - # zero chunk. See if the server will give us another line - self._responsefp = cStringIO.StringIO() - self.set_terminator("\r\n") - self.__set_state(_STATE_CHUNK_START) - - def _chunk_residue_data(self): - """ - overload asynchat.found_terminator for - _STATE_CHUNK_RESIDUE - """ - residue = string.strip(self._responsefp.getvalue()) - if self.debuglevel > 0 and residue: - print "chunk residue '%s'" % (residue) - - self._responsefp = None - - if self._willclose: - self.close() - - self.__set_state(_STATE_ACTIVE) - - # hand off the response object to the child class - self.handle_response() - - def handle_response(self): - """ - This is an abstract function, the user MUST overload it - """ - raise HandleResponse( - "Call to AsyncHTTPConnection.handle_response", name=str(self) - ) - - def __set_state(self, next_state): - """ - Change state be setting _found_terminator - """ - if self.debuglevel > 0: - print "%s to %s" % (self.__state, next_state) - self.__state = next_state - self.found_terminator = self._TERMINATOR_MAP[self.__state] - - -class AsyncHTTPException(Exception): - def __init__(self, message="", name=""): - self._message = message - self._name = name - - def __str__(self): - return "%s %s" % (self._name, self._message) - -class NotConnected(AsyncHTTPException): - pass - -class UnknownProtocol(AsyncHTTPException): - pass - -class UnknownTransferEncoding(AsyncHTTPException): - pass - -class BadStatusLine(AsyncHTTPException): - pass - -class ImproperConnectionState(AsyncHTTPException): - pass - -class RequestNotReady(ImproperConnectionState): - pass - -class ResponseNotReady(ImproperConnectionState): - pass - -class HandleResponse(ImproperConnectionState): - pass - -class UnexpectedData(AsyncHTTPException): - pass - -class UnexpectedTerminator(AsyncHTTPException): - pass - -class InvalidChunk(AsyncHTTPException): - pass - -class __test_AsyncHTTPConnection(AsyncHTTPConnection): - def __init__(self, host, port, url): - AsyncHTTPConnection.__init__( - self, host, port - ) - self._url = url - - - def handle_expt(self): - print "Hello" - self.close() - # sys.exit(1) - - def handle_response(self): - self.close() - - def handle_connect(self): - print "__test_AsyncHTTPConnection.handle_connect" - AsyncHTTPConnection.handle_connect(self) - self.putrequest("GET", self._url) - self.endheaders() - self.getresponse() - -if __name__ == "__main__": - """ - Code for command line testing - """ - if len(sys.argv) < 4: - print "Usage: asynchttp.py " - sys.exit(-1) - - tester = __test_AsyncHTTPConnection( - sys.argv[1], - int(sys.argv[2]), - sys.argv[3] - ) - tester.set_debuglevel(1) - tester.connect() - - asyncore.loop() - - if not hasattr(tester, "response"): - print "No response" - sys.exit(-1) - - print "results %s %d %s" % ( - tester.response.version, - tester.response.status, - tester.response.reason - ) - - print "headers:" - for hdr in tester.response.msg.headers: - print "%s" % (string.strip(hdr)) - - if tester.response.status == 200: - print "body:" - print tester.response.body diff --git a/toys/asynhttp/http_evented.py b/toys/asynhttp/http_evented.py deleted file mode 100644 index b5dbf34..0000000 --- a/toys/asynhttp/http_evented.py +++ /dev/null @@ -1,181 +0,0 @@ -"""Event based HTTP/1.1 client library - -This module is an attempt to create a true asynchronous event based -(javascript like) HTTP request-response interface. It is built up on -the asynchttp client interface. - -contact: -Dhruv Matani -""" -__author__=""" -Dhruv Matani -""" -__copyright__=""" -Copyright (c) 2010 Dhruv Matani. - -Distributed and Licensed under the provisions of the Python Open Source License -Agreement which is included by reference. (See 'Front Matter' in the latest -Python documentation) - -WARRANTIES -YOU UNDERSTAND AND AGREE THAT: - -a. YOUR USE OF THE PACKAGE IS AT YOUR SOLE RISK. THE PACKAGE IS PROVIDED ON -AN 'AS IS' AND 'AS AVAILABLE' BASIS. DOWNRIGHT EXPRESSLY DISCLAIMS ALL -WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED -TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE -AND NON-INFRINGEMENT. - -b. DOWNRIGHT MAKES NO WARRANTY THAT (1) THE PACKAGE WILL MEET YOUR -REQUIREMENTS, (2) THE PACKAGE WILL BE UNINTERRUPTED, TIMELY, SECURE, OR -ERROR-FREE, (3) THE RESULTS THAT MAY BE OBTAINED FROM THE USE OF THE PACKAGE -WILL BE ACCURATE OR RELIABLE, (4) THE OTHER MATERIAL PURCHASED OR OBTAINED BY -YOU THROUGH THE PACKAGE WILL MEET YOUR EXPECTATIONS,, AND (5) ANY ERRORS IN -THE PACKAGE WILL BE CORRECTED. - -c. ANY MATERIALS DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE -PACKAGE IS DONE AT YOUR OWN DISCRETION AND RISK AND THAT YOU WILL BE SOLELY -RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR LOSS OF DATA THAT -RESULTS FROM THE DOWNLOAD OF ANY SUCH MATERIAL. - -d. NO ADVICE OR INFORMATION, WHETHER ORAL OR WRITTEN, OBTAINED BY YOU FROM -DOWNRIGHT OR THROUGH OR FROM THE PACKAGE SHALL CREATE ANY WARRANTY NOT -EXPRESSLY STATED IN THE TOS. - -LIMITATION OF LIABILITY -YOU EXPRESSLY UNDERSTAND AND AGREE THAT DOWNRIGHT SHALL NOT BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES, -INCLUDING BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, -DATA OR OTHER INTANGIBLE LOSSES (EVEN IF DOWNRIGHT HAS BEEN ADVISED OF SUCH -DAMAGES), RESULTING FROM: -(1) THE USE OR THE INABILITY TO USE THE PACKAGE; -(2) THE COST OF PROCUREMENT OF SUBSTITUTE GOODS AND SERVICES RESULTING FROM -ANY GOODS, DATA, INFORMATION OR SERVICES PURCHASED OR OBTAINED OR MESSAGES -RECEIVED OR TRANSACTIONS ENTERED INTO THROUGH OR FROM THE PACKAGE; -(3) UNAUTHORIZED ACCESS TO OR ALTERATION OF YOUR TRANSMISSIONS OR DATA; -(4) STATEMENTS OF CONDUCT OF ANY THIRD PARTY ON THE PACKAGE; OR -(5) ANY OTHER MATTER RELATING TO THE PACKAGE. -""" - -from asynchttp import AsyncHTTPConnection -import collections - -STATE_CONNECTING = 1 -STATE_CONNECTED = 2 -STATE_DISCONNECTED = 3 - -def call_if_not_none_and_callable(o, **kwargs): - if o is not None and callable(o): - o(**kwargs) - -class http_evented(AsyncHTTPConnection, object): - """ - This is an event based async HTTP client. It lets you register - events which will be called whenever an HTTP request is completed. - - It sort of mimics the javascript way of making ajax calls, which - I have started to like for various reasons -- the last of which - is efficiency though ;) - - Use function parameter binding while using this module to get the - maximum bang for your buck :D - - DO NOT use request pipelining with unordered responses along with - this class if you are expecting your handlers to be called. You may - however use standard HTTP request pipelining in which responses are - guaranteed to be returned in the same order as the requests are made - - However, if you are handling re-ordering of responses at a higher - layer, then you may use it as you feel free. Make sure that that you - are prepared to handle the calling of the event handlers in ANY order - when the response is received from the server. You can typically - handle this by always registering the same function for every request - that you make - """ - def __init__(self, host_and_port, onConnected=None, - onClose=None, onException=None): - self._connection_state = STATE_DISCONNECTED - self._eventHandlers = collections.deque() - self._onClose = onClose - self._onException = onException - self._onConnected = None - self.reconnect(host_and_port, onConnected) - - def reconnect(self, host_and_port, onReconnect=None): - """ - [Re]connect to the HTTP end point - """ - if self._connection_state != STATE_CONNECTING and self._connection_state == STATE_DISCONNECTED: - host, port = host_and_port - self._connection_state = STATE_CONNECTING - self._onConnected = onReconnect - AsyncHTTPConnection.__init__(self, host, port) - self.connect() - - def handle_response(self): - """ - Called when a response from the server is received - """ - call_if_not_none_and_callable(self._eventHandlers.popleft(), - response=self.response) - - def handle_connect(self): - """ - Called when the connection to the HTTP end point succeeds - """ - print "http_evented::handle_connect" - self._connection_state = STATE_CONNECTED - super(http_evented, self).handle_connect() - call_if_not_none_and_callable(self._onConnected) - - def handle_close(self): - """ - Called when the connection is closed from the server end - """ - self._connection_state = STATE_DISCONNECTED - super(http_evented, self).handle_close() - self._fail_all_pending_event_handlers() - call_if_not_none_and_callable(self._onClose) - - def handle_error(self): - super(http_evented, self).handle_error() - self._perform_on_error_handling() - - def handle_expt(self): - """ - Called in case an exception is thrown while executing code. - This can also happen due to disconnection if the remote - HTTP end point goes down - """ - self._perform_on_error_handling() - - def _perform_on_error_handling(self): - self._connection_state = STATE_DISCONNECTED - self._fail_all_pending_event_handlers() - call_if_not_none_and_callable(self._onException) - - def push_HTTP_request(self, method, url, body, headers, callback=None): - """ - Just PUSH the request on to the request queue. It will be sent - ONLY when pop_response() is called - """ - self.request(method, url, body, headers) - self.push_request() - self._eventHandlers.append(callback) - - def make_HTTP_request(self, method, url, body, headers, callback=None): - """ - Make an HTTP request to the other HTTP end point. The callable - 'callback' will be called with either no parameter OR a single - parameter named 'response' which will hold the HTTP response - object. If there is an error or the response could NOT be - processed for some reason, then response=None is passed to the - callback function - """ - self.push_HTTP_request(method, url, body, headers, callback) - self.pop_response() - - def _fail_all_pending_event_handlers(self): - for eh in self._eventHandlers: - call_if_not_none_and_callable(eh, response=None) - self._eventHandlers.clear() diff --git a/toys/brhute.py b/toys/brhute.py deleted file mode 100644 index 851d742..0000000 --- a/toys/brhute.py +++ /dev/null @@ -1,104 +0,0 @@ -from collections import deque -import time -import asyncore -from asynhttp import http_evented # in brhute repository -import asyncdns # sudo pip install asyncdns -import warnings - -# grbrute - asynchronous URL fetcher based on asyhttp -# Uses multiple simultaneous connections and multiple requests per connections -# 2013, Laurent Ghigonis - -# Python grequests ressources : -# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous -# https://github.com/kennethreitz/grequests/issues/13 -# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e -# https://gist.github.com/ibrahima/3153647 - request_queue.py -# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus - -# XXX multiple processes, autodetect and repartir connections -# DNS resolving with asyncdns - -class Brhute_connection: - def __init__(self, url_iter, ip, port, req_per_connection, cb_response, - interval=0, verbose=False): - self.url_iter = url_iter - self.ip = ip - self.port = port - self.req_per_connection = req_per_connection - self.cb_response_user = cb_response - self.interval = interval - self.verbose = verbose - self.ongoing = 0 - self.hev = http_evented.http_evented((ip, port), onConnected=self._connected) - - def get(self, host, url): - if self.verbose: - print "XXX Brhute_connection.get" - headers = {'Host': host} - body = None - self.hev.make_HTTP_request("GET", url, body, headers, - self._cb_response) - self.ongoing += 1 - - def _connected(self): - self._send() - - def _send(self): - while self.ongoing < self.req_per_connection: - # get an URL to send - try: - (host, url) = next(self.url_iter) - except StopIteration, e: - return - if self.verbose: - print "[-] %s" % url - # send the url - self.get(host, url) - - def _cb_response(self, response): - self.ongoing -= 1 - if self.cb_response_user: - self.cb_response_user(response) - self._send() - time.sleep(self.interval) - -class Brhute_ip: - """ Fetch URLs from one IP - url_iter is the iterator that provides the URLs. - cb_response should return True for the processing to continue, and False - to terminate. - If you want to integrate it in a gevent driven program, use block=False""" - def __init__(self, url_iter, ip, port=80, cb_response=None, - nb_connections=3, req_per_connection=10, interval=0, - verbose=False, block=True): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't expect this to work") - self.url_iter = url_iter - self.ip = ip - self.port = port - self.cb_response_user = cb_response - self.nb_connections = nb_connections - self.req_per_connection = req_per_connection - self.interval = interval - self.verbose = verbose - - self.conns = deque() - for i in range(nb_connections): - self.conns.append(Brhute_connection(url_iter, ip, port, - req_per_connection, cb_response, interval, - verbose)) - if block: - asyncore.loop() - -class Brhute_multi_ip: - """Fetch URLs from multiple IPs pointing to the same content""" - def __init__(self): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't excpect this to work") - -class Brhute: - """Fetch URLs""" - def __init__(self): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute/brhute.py b/toys/brhute/brhute.py new file mode 100644 index 0000000..851d742 --- /dev/null +++ b/toys/brhute/brhute.py @@ -0,0 +1,104 @@ +from collections import deque +import time +import asyncore +from asynhttp import http_evented # in brhute repository +import asyncdns # sudo pip install asyncdns +import warnings + +# grbrute - asynchronous URL fetcher based on asyhttp +# Uses multiple simultaneous connections and multiple requests per connections +# 2013, Laurent Ghigonis + +# Python grequests ressources : +# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous +# https://github.com/kennethreitz/grequests/issues/13 +# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e +# https://gist.github.com/ibrahima/3153647 - request_queue.py +# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus + +# XXX multiple processes, autodetect and repartir connections +# DNS resolving with asyncdns + +class Brhute_connection: + def __init__(self, url_iter, ip, port, req_per_connection, cb_response, + interval=0, verbose=False): + self.url_iter = url_iter + self.ip = ip + self.port = port + self.req_per_connection = req_per_connection + self.cb_response_user = cb_response + self.interval = interval + self.verbose = verbose + self.ongoing = 0 + self.hev = http_evented.http_evented((ip, port), onConnected=self._connected) + + def get(self, host, url): + if self.verbose: + print "XXX Brhute_connection.get" + headers = {'Host': host} + body = None + self.hev.make_HTTP_request("GET", url, body, headers, + self._cb_response) + self.ongoing += 1 + + def _connected(self): + self._send() + + def _send(self): + while self.ongoing < self.req_per_connection: + # get an URL to send + try: + (host, url) = next(self.url_iter) + except StopIteration, e: + return + if self.verbose: + print "[-] %s" % url + # send the url + self.get(host, url) + + def _cb_response(self, response): + self.ongoing -= 1 + if self.cb_response_user: + self.cb_response_user(response) + self._send() + time.sleep(self.interval) + +class Brhute_ip: + """ Fetch URLs from one IP + url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, ip, port=80, cb_response=None, + nb_connections=3, req_per_connection=10, interval=0, + verbose=False, block=True): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't expect this to work") + self.url_iter = url_iter + self.ip = ip + self.port = port + self.cb_response_user = cb_response + self.nb_connections = nb_connections + self.req_per_connection = req_per_connection + self.interval = interval + self.verbose = verbose + + self.conns = deque() + for i in range(nb_connections): + self.conns.append(Brhute_connection(url_iter, ip, port, + req_per_connection, cb_response, interval, + verbose)) + if block: + asyncore.loop() + +class Brhute_multi_ip: + """Fetch URLs from multiple IPs pointing to the same content""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") + +class Brhute: + """Fetch URLs""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute/brhute_multitprocessing_broken.py b/toys/brhute/brhute_multitprocessing_broken.py new file mode 100644 index 0000000..fb7f19d --- /dev/null +++ b/toys/brhute/brhute_multitprocessing_broken.py @@ -0,0 +1,121 @@ +from collections import deque +import time +import threading +import Queue +import asyncore +from asynhttp import http_evented # in brhute repository +import asyncdns # sudo pip install asyncdns +import warnings + +# grbrute - asynchronous URL fetcher based on asyhttp +# Uses multiple simultaneous connections and multiple requests per connections +# 2013, Laurent Ghigonis + +# Python grequests ressources : +# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous +# https://github.com/kennethreitz/grequests/issues/13 +# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e +# https://gist.github.com/ibrahima/3153647 - request_queue.py +# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus + +# XXX multiple processes, autodetect and repartir connections +# DNS resolving with asyncdns + +class Brhute_connection(): + def __init__(self, queue, ip, port, req_per_connection, cb_response, + interval=0, verbose=False): + self.queue = queue + self.ip = ip + self.port = port + self.req_per_connection = req_per_connection + self.cb_response_user = cb_response + self.interval = interval + self.verbose = verbose + self.ongoing = 0 + self.hev = http_evented.http_evented((ip, port), onConnected=self._connected) + asyncore.loop() + + def get(self, host, url): + if self.verbose: + print "XXX Brhute_connection.get" + headers = {'Host': host} + body = None + self.hev.make_HTTP_request("GET", url, body, headers, + self._cb_response) + self.ongoing += 1 + + def _connected(self): + self._send() + + def _send(self): + if self.ongoing == self.req_per_connection: + return + # get an URL to send + try: + print "XXX queue get" + try: + host, url = self.queue.get(False) + except Queue.Empty: + return + except StopIteration, e: + return + if self.verbose: + print "[-] %s" % url + # send the url + self.get(host, url) + self.queue.task_done() + + def _cb_response(self, response): + self.ongoing -= 1 + if self.cb_response_user: + self.cb_response_user(response) + self._send() + time.sleep(self.interval) + +class Brhute_ip: + """ Fetch URLs from one IP + url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, ip, port=80, cb_response=None, + nb_connections=3, req_per_connection=10, interval=0, + verbose=False, block=True): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't expect this to work") + self.url_iter = url_iter + self.ip = ip + self.port = port + self.cb_response_user = cb_response + self.nb_connections = nb_connections + self.req_per_connection = req_per_connection + self.interval = interval + self.verbose = verbose + queue = multiprocessing.JoinableQueue() + + self.conns = deque() + for i in range(nb_connections): + p = multiprocessing.Process(target=self._proc, + args=(queue, ip, port, + req_per_connection, cb_response, + interval, verbose)) + p.start() + self.conns.append(p) + for host, url in url_iter: + queue.put((host, url)) + time.sleep(60) # XXX + + def _proc(self, queue, ip, port, req_per_connection, cb_response, interval, verbose): + Brhute_connection(queue, ip, port, req_per_connection, cb_response, interval, verbose) + +class Brhute_multi_ip: + """Fetch URLs from multiple IPs pointing to the same content""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") + +class Brhute: + """Fetch URLs""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute/brhute_threaded.py b/toys/brhute/brhute_threaded.py new file mode 100644 index 0000000..22ab2bb --- /dev/null +++ b/toys/brhute/brhute_threaded.py @@ -0,0 +1,75 @@ +from collections import deque +import time +import httplib_pipelining +import threading +import threaded_resolver +import Queue +import warnings + +# grbrute - asynchronous URL fetcher using threads and HTTP pipelining +# Makes multiple simultaneous connections and multiple requests per connections +# 2013, Laurent Ghigonis + +# XXX multiple processes, autodetect and repartir connections +# DNS resolving with asyncdns + +class Brhute_connection(threading.Thread): + def __init__(self, ip, port, queue, req_per_connection, cb_response, + interval=0, verbose=False): + threading.Thread.__init__(self) + self.queue = queue + self.ip = ip + self.port = port + self.req_per_connection = req_per_connection + self.cb_response_user = cb_response + self.interval = interval + self.verbose = verbose + + def run(self): + conn = httplib_pipelining.HTTP_pipeline(self.ip, self.queue, self.cb_response_user) + conn.run() + +class Brhute_ip: + """ Fetch URLs from one IP + url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, ip, port=80, cb_response=None, + nb_connections=3, req_per_connection=10, interval=0, + verbose=False, block=True): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't expect this to work") + self.url_iter = url_iter + self.ip = ip + self.port = port + self.cb_response_user = cb_response + self.nb_connections = nb_connections + self.req_per_connection = req_per_connection + self.interval = interval + self.verbose = verbose + + queue = Queue.Queue() + + for i in range(nb_connections): + c = Brhute_connection(ip, port, queue, + req_per_connection, cb_response, + interval, verbose) + c.setDaemon(True) + c.start() + + for host, url in url_iter: + queue.put(url) + queue.join() + +class Brhute_multi_ip: + """Fetch URLs from multiple IPs pointing to the same content""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") + +class Brhute: + """Fetch URLs""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute/brhute_twisted.py b/toys/brhute/brhute_twisted.py new file mode 100644 index 0000000..22ab2bb --- /dev/null +++ b/toys/brhute/brhute_twisted.py @@ -0,0 +1,75 @@ +from collections import deque +import time +import httplib_pipelining +import threading +import threaded_resolver +import Queue +import warnings + +# grbrute - asynchronous URL fetcher using threads and HTTP pipelining +# Makes multiple simultaneous connections and multiple requests per connections +# 2013, Laurent Ghigonis + +# XXX multiple processes, autodetect and repartir connections +# DNS resolving with asyncdns + +class Brhute_connection(threading.Thread): + def __init__(self, ip, port, queue, req_per_connection, cb_response, + interval=0, verbose=False): + threading.Thread.__init__(self) + self.queue = queue + self.ip = ip + self.port = port + self.req_per_connection = req_per_connection + self.cb_response_user = cb_response + self.interval = interval + self.verbose = verbose + + def run(self): + conn = httplib_pipelining.HTTP_pipeline(self.ip, self.queue, self.cb_response_user) + conn.run() + +class Brhute_ip: + """ Fetch URLs from one IP + url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, ip, port=80, cb_response=None, + nb_connections=3, req_per_connection=10, interval=0, + verbose=False, block=True): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't expect this to work") + self.url_iter = url_iter + self.ip = ip + self.port = port + self.cb_response_user = cb_response + self.nb_connections = nb_connections + self.req_per_connection = req_per_connection + self.interval = interval + self.verbose = verbose + + queue = Queue.Queue() + + for i in range(nb_connections): + c = Brhute_connection(ip, port, queue, + req_per_connection, cb_response, + interval, verbose) + c.setDaemon(True) + c.start() + + for host, url in url_iter: + queue.put(url) + queue.join() + +class Brhute_multi_ip: + """Fetch URLs from multiple IPs pointing to the same content""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") + +class Brhute: + """Fetch URLs""" + def __init__(self): + warnings.warn("XXX WARNING: WORK IN PROGRESS") + warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute/contrib/httplib_pipelining_orig.py b/toys/brhute/contrib/httplib_pipelining_orig.py new file mode 100644 index 0000000..75e9aad --- /dev/null +++ b/toys/brhute/contrib/httplib_pipelining_orig.py @@ -0,0 +1,99 @@ +## {{{ http://code.activestate.com/recipes/576673/ (r5) +from httplib import HTTPConnection, _CS_IDLE +import urlparse + +def pipeline(domain,pages,max_out_bound=4,debuglevel=0): + pagecount = len(pages) + conn = HTTPConnection(domain) + conn.set_debuglevel(debuglevel) + respobjs = [None]*pagecount + finished = [False]*pagecount + data = [None]*pagecount + headers = {'Host':domain,'Content-Length':0,'Connection':'Keep-Alive'} + + while not all(finished): + # Send + out_bound = 0 + for i,page in enumerate(pages): + if out_bound >= max_out_bound: + break + elif page and not finished[i] and respobjs[i] is None: + if debuglevel > 0: + print 'Sending request for %r...' % (page,) + conn._HTTPConnection__state = _CS_IDLE # FU private variable! + conn.request("GET", page, None, headers) + respobjs[i] = conn.response_class(conn.sock, strict=conn.strict, method=conn._method) + out_bound += 1 + # Try to read a response + for i,resp in enumerate(respobjs): + if resp is None: + continue + if debuglevel > 0: + print 'Retrieving %r...' % (pages[i],) + out_bound -= 1 + skip_read = False + resp.begin() + if debuglevel > 0: + print ' %d %s' % (resp.status, resp.reason) + if 200 <= resp.status < 300: + # Ok + data[i] = resp.read() + cookie = resp.getheader('Set-Cookie') + if cookie is not None: + headers['Cookie'] = cookie + skip_read = True + finished[i] = True + respobjs[i] = None + elif 300 <= resp.status < 400: + # Redirect + loc = resp.getheader('Location') + respobjs[i] = None + parsed = loc and urlparse.urlparse(loc) + if not parsed: + # Missing or empty location header + data[i] = (resp.status, resp.reason) + finished[i] = True + elif parsed.netloc != '' and parsed.netloc != host: + # Redirect to another host + data[i] = (resp.status, resp.reason, loc) + finished[i] = True + else: + path = urlparse.urlunparse(parsed._replace(scheme='',netloc='',fragment='')) + if debuglevel > 0: + print ' Updated %r to %r' % (pages[i],path) + pages[i] = path + elif resp.status >= 400: + # Failed + data[i] = (resp.status, resp.reason) + finished[i] = True + respobjs[i] = None + if resp.will_close: + # Connection (will be) closed, need to resend + conn.close() + if debuglevel > 0: + print ' Connection closed' + for j,f in enumerate(finished): + if not f and respobj[j] is not None: + if debuglevel > 0: + print ' Discarding out-bound request for %r' % (pages[j],) + respobj[j] = None + break + elif not skip_read: + resp.read() # read any data + if any(not f and respobjs[j] is None for j,f in enumerate(finished)): + # Send another pending request + break + else: + break # All respobjs are None? + return data + +if __name__ == '__main__': + domain = 'en.wikipedia.org' + pages = ('/wiki/HTTP_pipelining', '/wiki/HTTP', '/wiki/HTTP_persistent_connection') + data = pipeline(domain,pages,max_out_bound=2,debuglevel=1) + for i,page in enumerate(data): + print + print '==== Page %r ====' % (pages[i],) + print page[:512] +## end of http://code.activestate.com/recipes/576673/ }}} + diff --git a/toys/brhute/grbrute.py b/toys/brhute/grbrute.py new file mode 100644 index 0000000..fbdc8bc --- /dev/null +++ b/toys/brhute/grbrute.py @@ -0,0 +1,90 @@ +import requests +import grequests +import gevent +from collections import deque +import time +import warnings + +# grbrute - asynchronous URL fetcher based on grequests +# Uses multiple simultaneous connections and reuses them (HTTP/1.1) +# 2013, Laurent Ghigonis + +# XXX urllib3 and therefore requests do not support pipelining ... + +# Python grequests ressources : +# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous +# https://github.com/kennethreitz/grequests/issues/13 +# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e +# https://gist.github.com/ibrahima/3153647 - request_queue.py +# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus + +class SessionQueue: + def __init__(self, pool, cb_response): + self.pool = pool + self.cb_response = cb_response + self.session = requests.Session() + self.ongoing = 0 + + def add(self, url): + req = grequests.get(url, session=self.session, + hooks = {'response' : self._cb_response_session}) + grequests.send(req, self.pool, exception_handler=self._cb_exception) + self.ongoing += 1 + + def _cb_response_session(self, res, verify=None, cert=None, proxies=None, timeout=None, stream=None): + self.ongoing -= 1 + if self.cb_response(res) is False: + self.pool.kill() + + def _cb_exception(self, req, e): + print "ERROR: sending of %s failed, retrying :\n%s" % (req.url, e) + grequests.send(req, self.pool, exception_handler=self._cb_exception) + +class Grbrute: + """ url_iter is the iterator that provides the URLs. + cb_response should return True for the processing to continue, and False + to terminate. + If you want to integrate it in a gevent driven program, use block=False""" + def __init__(self, url_iter, cb_response=None, + nb_sessions=3, req_per_session=10, sleep=0, + verbose=False, block=True): + self.url_iter = url_iter + self.cb_response_user = cb_response + self.nb_sessions = nb_sessions + self.req_per_session = req_per_session + self.sleep = sleep + self.verbose = verbose + self.pool = grequests.Pool() + self.sessions = deque() + self.ongoing_total = 0 + for i in range(nb_sessions): + self.sessions.append(SessionQueue(self.pool, self._cb_response)) + self._send() + if block: + self.pool.join() + + def _send(self): + while self.ongoing_total < self.nb_sessions * self.req_per_session: + # get an URL to send + try: + url = next(self.url_iter) + except StopIteration, e: + return + if self.verbose: + print "[-] %s" % url + # select a session that has room to send + while self.sessions[0].ongoing == self.req_per_session: + self.sessions.rotate(1) + # send URL using selected sessions + self.sessions[0].add(url) + self.ongoing_total += 1 + self.sessions.rotate(1) + + def _cb_response(self, res): + self.ongoing_total -= 1 + cont = True + if self.cb_response_user: + cont = self.cb_response_user(res) + self._send() + time.sleep(self.sleep) + return cont diff --git a/toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt b/toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt new file mode 100644 index 0000000..cf85bda --- /dev/null +++ b/toys/brhute/grbrute_profiling/profile_pphidden_async_data.txt @@ -0,0 +1,1023 @@ + ncalls tottime percall cumtime percall filename:lineno(function) + 2/1 0.001 0.000 3.165 3.165 :1() + 1 0.000 0.000 0.000 0.000 :1(ParseResult) + 1 0.000 0.000 0.000 0.000 :1(SplitResult) + 1 0.000 0.000 0.000 0.000 :1(Url) + 612 0.003 0.000 0.004 0.000 :1(fileno) + 2210 0.008 0.000 0.013 0.000 :8(__new__) + 1 0.001 0.001 0.017 0.017 Cookie.py:206() + 1 0.000 0.000 0.000 0.000 Cookie.py:232(CookieError) + 257 0.001 0.000 0.001 0.000 Cookie.py:308() + 1 0.000 0.000 0.000 0.000 Cookie.py:403(Morsel) + 1 0.000 0.000 0.000 0.000 Cookie.py:549(BaseCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:665(SimpleCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:679(SerialCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:705(SmartCookie) + 1 0.001 0.001 0.002 0.002 Queue.py:1() + 320 0.007 0.000 0.016 0.000 Queue.py:107(put) + 1 0.000 0.000 0.000 0.000 Queue.py:13(Full) + 320 0.005 0.000 0.015 0.000 Queue.py:150(get) + 1 0.000 0.000 0.000 0.000 Queue.py:17(Queue) + 1 0.000 0.000 0.000 0.000 Queue.py:212(PriorityQueue) + 3 0.000 0.000 0.000 0.000 Queue.py:22(__init__) + 1 0.000 0.000 0.000 0.000 Queue.py:231(LifoQueue) + 3 0.000 0.000 0.000 0.000 Queue.py:234(_init) + 640 0.002 0.000 0.003 0.000 Queue.py:237(_qsize) + 320 0.001 0.000 0.002 0.000 Queue.py:240(_put) + 320 0.001 0.000 0.002 0.000 Queue.py:243(_get) + 1 0.000 0.000 0.000 0.000 Queue.py:9(Empty) + 1 0.000 0.000 0.000 0.000 StringIO.py:30() + 1 0.000 0.000 0.000 0.000 StringIO.py:42(StringIO) + 643 0.001 0.000 0.001 0.000 UserDict.py:17(__getitem__) + 4492 0.015 0.000 0.021 0.000 UserDict.py:57(get) + 5132 0.008 0.000 0.008 0.000 UserDict.py:69(__contains__) + 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:12() + 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:49(LWPCookieJar) + 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:1() + 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:8(MozillaCookieJar) + 1 0.000 0.000 0.000 0.000 __future__.py:48() + 1 0.000 0.000 0.000 0.000 __future__.py:74(_Feature) + 7 0.000 0.000 0.000 0.000 __future__.py:75(__init__) + 3 0.001 0.000 0.166 0.055 __init__.py:1() + 1 0.000 0.000 0.000 0.000 __init__.py:1001(Logger) + 8 0.000 0.000 0.000 0.000 __init__.py:1016(__init__) + 290 0.001 0.000 0.009 0.000 __init__.py:1034(debug) + 3 0.000 0.000 0.000 0.000 __init__.py:104(CFunctionType) + 30 0.000 0.000 0.002 0.000 __init__.py:1046(info) + 2 0.000 0.000 0.000 0.000 __init__.py:1185(addHandler) + 320 0.008 0.000 0.008 0.000 __init__.py:1230(getEffectiveLevel) + 320 0.002 0.000 0.010 0.000 __init__.py:1244(isEnabledFor) + 1 0.000 0.000 0.000 0.000 __init__.py:1252(RootLogger) + 1 0.000 0.000 0.000 0.000 __init__.py:1258(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:1266(LoggerAdapter) + 7 0.000 0.000 0.003 0.000 __init__.py:1420(getLogger) + 14 0.000 0.000 0.000 0.000 __init__.py:147(_check_size) + 1 0.000 0.000 0.000 0.000 __init__.py:159(py_object) + 1 0.000 0.000 0.000 0.000 __init__.py:168(c_short) + 1 0.000 0.000 0.000 0.000 __init__.py:172(c_ushort) + 1 0.000 0.000 0.000 0.000 __init__.py:176(c_long) + 1 0.000 0.000 0.000 0.000 __init__.py:18() + 1 0.000 0.000 0.000 0.000 __init__.py:180(c_ulong) + 1 0.000 0.000 0.000 0.000 __init__.py:189(c_int) + 1 0.000 0.000 0.000 0.000 __init__.py:193(c_uint) + 9 0.000 0.000 0.000 0.000 __init__.py:194(_acquireLock) + 1 0.000 0.000 0.000 0.000 __init__.py:197(c_float) + 1 0.000 0.000 0.000 0.000 __init__.py:201(c_double) + 9 0.000 0.000 0.000 0.000 __init__.py:203(_releaseLock) + 1 0.000 0.000 0.000 0.000 __init__.py:205(c_longdouble) + 1 0.000 0.000 0.000 0.000 __init__.py:214(LogRecord) + 1 0.000 0.000 0.000 0.000 __init__.py:226(c_ubyte) + 1 0.000 0.000 0.000 0.000 __init__.py:233(c_byte) + 1 0.000 0.000 0.000 0.000 __init__.py:238(c_char) + 1 0.003 0.003 0.005 0.005 __init__.py:24() + 1 0.000 0.000 0.000 0.000 __init__.py:243(c_char_p) + 1 0.000 0.000 0.000 0.000 __init__.py:255(c_void_p) + 1 0.000 0.000 0.000 0.000 __init__.py:260(c_bool) + 1 0.000 0.000 0.000 0.000 __init__.py:275(c_wchar_p) + 1 0.000 0.000 0.000 0.000 __init__.py:278(c_wchar) + 1 0.000 0.000 0.000 0.000 __init__.py:320(CDLL) + 1 0.000 0.000 0.000 0.000 __init__.py:324(Formatter) + 3 0.000 0.000 0.001 0.000 __init__.py:337(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:34(NullHandler) + 3 0.000 0.000 0.000 0.000 __init__.py:347(_FuncPtr) + 4 0.000 0.000 0.000 0.000 __init__.py:363(__getattr__) + 1 0.000 0.000 0.000 0.000 __init__.py:368(__init__) + 4 0.000 0.000 0.000 0.000 __init__.py:370(__getitem__) + 1 0.000 0.000 0.000 0.000 __init__.py:376(PyDLL) + 1 0.004 0.004 0.006 0.006 __init__.py:4() + 1 0.000 0.000 0.000 0.000 __init__.py:416(LibraryLoader) + 2 0.000 0.000 0.000 0.000 __init__.py:417(__init__) + 1 0.001 0.001 0.371 0.371 __init__.py:42() + 1 0.000 0.000 0.000 0.000 __init__.py:462(BufferingFormatter) + 3 0.000 0.000 0.000 0.000 __init__.py:480(PYFUNCTYPE) + 3 0.000 0.000 0.000 0.000 __init__.py:481(CFunctionType) + 5 0.000 0.000 0.000 0.000 __init__.py:49(normalize_encoding) + 1 0.006 0.006 0.009 0.009 __init__.py:5() + 1 0.000 0.000 0.000 0.000 __init__.py:504(Filter) + 1 0.000 0.000 0.000 0.000 __init__.py:541(Filterer) + 10 0.000 0.000 0.000 0.000 __init__.py:546(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:588(Handler) + 2 0.000 0.000 0.000 0.000 __init__.py:597(__init__) + 2 0.000 0.000 0.000 0.000 __init__.py:614(createLock) + 1 0.000 0.000 0.000 0.000 __init__.py:67(NullHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:7(CertificateError) + 2 0.000 0.000 0.017 0.008 __init__.py:71(search_function) + 1 0.000 0.000 0.000 0.000 __init__.py:739(StreamHandler) + 3 0.000 0.000 0.000 0.000 __init__.py:78(CFUNCTYPE) + 1 0.000 0.000 0.000 0.000 __init__.py:806(FileHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:866(PlaceHolder) + 3 0.000 0.000 0.000 0.000 __init__.py:872(__init__) + 10 0.000 0.000 0.000 0.000 __init__.py:879(append) + 1 0.001 0.001 0.165 0.165 __init__.py:9() + 1 0.000 0.000 0.000 0.000 __init__.py:913(Manager) + 1 0.000 0.000 0.000 0.000 __init__.py:918(__init__) + 7 0.000 0.000 0.003 0.000 __init__.py:927(getLogger) + 7 0.002 0.000 0.003 0.000 __init__.py:959(_fixupParents) + 1 0.001 0.001 0.036 0.036 __init__.py:98() + 2 0.000 0.000 0.000 0.000 __init__.py:983(_fixupChildren) + 1 0.000 0.000 0.000 0.000 _abcoll.py:127(__subclasshook__) + 1 0.000 0.000 0.000 0.000 _abcoll.py:24(_hasattr) + 2 0.000 0.000 0.000 0.000 _abcoll.py:26() + 320 0.002 0.000 0.021 0.000 _abcoll.py:334(get) + 1 0.000 0.000 0.000 0.000 _collections.py:22(RecentlyUsedContainer) + 6 0.000 0.000 0.000 0.000 _collections.py:38(__init__) + 320 0.005 0.000 0.019 0.000 _collections.py:45(__getitem__) + 3 0.000 0.000 0.000 0.000 _collections.py:52(__setitem__) + 1 0.000 0.000 0.001 0.001 _collections.py:7() + 1 0.000 0.000 0.000 0.000 _endian.py:22(_swapped_meta) + 1 0.000 0.000 0.000 0.000 _endian.py:4() + 1 0.000 0.000 0.000 0.000 _endian.py:45(BigEndianStructure) + 320 0.002 0.000 0.002 0.000 abc.py:125(__instancecheck__) + 1 0.000 0.000 0.000 0.000 abc.py:145(__subclasscheck__) + 16 0.001 0.000 0.003 0.000 abc.py:83(__new__) + 16 0.000 0.000 0.001 0.000 abc.py:86() + 290 0.014 0.000 0.198 0.001 adapters.py:105(build_response) + 320 0.007 0.000 0.069 0.000 adapters.py:133(get_connection) + 320 0.004 0.000 0.020 0.000 adapters.py:154(request_url) + 320 0.004 0.000 0.011 0.000 adapters.py:169(add_headers) + 320/1 0.016 0.000 3.136 3.136 adapters.py:188(send) + 1 0.000 0.000 0.000 0.000 adapters.py:32(BaseAdapter) + 6 0.000 0.000 0.000 0.000 adapters.py:35(__init__) + 1 0.000 0.000 0.000 0.000 adapters.py:45(HTTPAdapter) + 6 0.000 0.000 0.001 0.000 adapters.py:49(__init__) + 6 0.000 0.000 0.001 0.000 adapters.py:70(init_poolmanager) + 320 0.002 0.000 0.003 0.000 adapters.py:77(cert_verify) + 1 0.000 0.000 0.000 0.000 adapters.py:9() + 1 0.000 0.000 0.003 0.003 api.py:12() + 1 0.000 0.000 0.000 0.000 argparse.py:1008(_HelpAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1010(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1027(_VersionAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1052(_SubParsersAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1054(_ChoicesPseudoAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1124(FileType) + 1 0.000 0.000 0.000 0.000 argparse.py:1167(Namespace) + 1 0.000 0.000 0.000 0.000 argparse.py:1174(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1188(_ActionsContainer) + 3 0.000 0.000 0.002 0.001 argparse.py:1190(__init__) + 13 0.000 0.000 0.000 0.000 argparse.py:122(_callable) + 34 0.000 0.000 0.000 0.000 argparse.py:1242(register) + 13 0.000 0.000 0.000 0.000 argparse.py:1246(_registry_get) + 5 0.000 0.000 0.001 0.000 argparse.py:1271(add_argument) + 2 0.000 0.000 0.000 0.000 argparse.py:1311(add_argument_group) + 5 0.000 0.000 0.000 0.000 argparse.py:1321(_add_action) + 3 0.000 0.000 0.000 0.000 argparse.py:1385(_get_positional_kwargs) + 2 0.000 0.000 0.000 0.000 argparse.py:1401(_get_optional_kwargs) + 5 0.000 0.000 0.000 0.000 argparse.py:1436(_pop_action_class) + 3 0.000 0.000 0.000 0.000 argparse.py:1440(_get_handler) + 5 0.000 0.000 0.000 0.000 argparse.py:1449(_check_conflict) + 1 0.000 0.000 0.000 0.000 argparse.py:147(_AttributeHolder) + 1 0.000 0.000 0.000 0.000 argparse.py:1485(_ArgumentGroup) + 2 0.000 0.000 0.000 0.000 argparse.py:1487(__init__) + 5 0.000 0.000 0.000 0.000 argparse.py:1508(_add_action) + 1 0.000 0.000 0.000 0.000 argparse.py:1518(_MutuallyExclusiveGroup) + 1 0.000 0.000 0.000 0.000 argparse.py:1538(ArgumentParser) + 1 0.000 0.000 0.005 0.005 argparse.py:1556(__init__) + 5 0.000 0.000 0.000 0.000 argparse.py:1677(_add_action) + 1 0.000 0.000 0.000 0.000 argparse.py:1689(_get_positional_actions) + 1 0.000 0.000 0.002 0.002 argparse.py:1697(parse_args) + 1 0.000 0.000 0.002 0.002 argparse.py:1704(parse_known_args) + 1 0.000 0.000 0.002 0.002 argparse.py:1735(_parse_known_args) + 3 0.000 0.000 0.000 0.000 argparse.py:1782(take_action) + 1 0.000 0.000 0.000 0.000 argparse.py:182(HelpFormatter) + 1 0.000 0.000 0.002 0.002 argparse.py:1880(consume_positionals) + 1 0.000 0.000 0.002 0.002 argparse.py:2021(_match_arguments_partial) + 3 0.000 0.000 0.000 0.000 argparse.py:2037(_parse_optional) + 3 0.000 0.000 0.000 0.000 argparse.py:2138(_get_nargs_pattern) + 3 0.000 0.000 0.000 0.000 argparse.py:2182(_get_values) + 3 0.000 0.000 0.000 0.000 argparse.py:2231(_get_value) + 3 0.000 0.000 0.000 0.000 argparse.py:2256(_check_value) + 1 0.000 0.000 0.000 0.000 argparse.py:230(_Section) + 1 0.000 0.000 0.000 0.000 argparse.py:656(RawDescriptionHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:667(RawTextHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:678(ArgumentDefaultsHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:712(ArgumentError) + 1 0.000 0.000 0.000 0.000 argparse.py:732(ArgumentTypeError) + 1 0.000 0.000 0.000 0.000 argparse.py:741(Action) + 1 0.003 0.003 0.006 0.006 argparse.py:76() + 5 0.000 0.000 0.000 0.000 argparse.py:792(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:832(_StoreAction) + 3 0.000 0.000 0.000 0.000 argparse.py:834(__init__) + 3 0.000 0.000 0.000 0.000 argparse.py:863(__call__) + 1 0.000 0.000 0.000 0.000 argparse.py:867(_StoreConstAction) + 1 0.000 0.000 0.000 0.000 argparse.py:869(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:890(_StoreTrueAction) + 1 0.000 0.000 0.000 0.000 argparse.py:892(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:907(_StoreFalseAction) + 1 0.000 0.000 0.000 0.000 argparse.py:924(_AppendAction) + 1 0.000 0.000 0.000 0.000 argparse.py:961(_AppendConstAction) + 1 0.000 0.000 0.000 0.000 argparse.py:987(_CountAction) + 1 0.000 0.000 0.000 0.000 ascii.py:13(Codec) + 1 0.000 0.000 0.000 0.000 ascii.py:20(IncrementalEncoder) + 1 0.000 0.000 0.000 0.000 ascii.py:24(IncrementalDecoder) + 1 0.000 0.000 0.000 0.000 ascii.py:28(StreamWriter) + 1 0.000 0.000 0.000 0.000 ascii.py:31(StreamReader) + 1 0.000 0.000 0.000 0.000 ascii.py:34(StreamConverter) + 1 0.000 0.000 0.000 0.000 ascii.py:41(getregentry) + 1 0.000 0.000 0.000 0.000 ascii.py:8() + 1 0.000 0.000 0.000 0.000 atexit.py:37(register) + 1 0.000 0.000 0.000 0.000 atexit.py:6() + 1 0.000 0.000 0.000 0.000 auth.py:33(AuthBase) + 1 0.000 0.000 0.000 0.000 auth.py:40(HTTPBasicAuth) + 1 0.000 0.000 0.000 0.000 auth.py:51(HTTPProxyAuth) + 1 0.000 0.000 0.000 0.000 auth.py:58(HTTPDigestAuth) + 1 0.000 0.000 0.001 0.001 auth.py:8() + 1 0.001 0.001 0.001 0.001 base64.py:3() + 1 0.000 0.000 0.000 0.000 bisect.py:1() + 1 0.000 0.000 0.000 0.000 calendar.py:126(Calendar) + 1 0.000 0.000 0.000 0.000 calendar.py:132(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:138(setfirstweekday) + 1 0.000 0.000 0.000 0.000 calendar.py:21(IllegalMonthError) + 1 0.000 0.000 0.000 0.000 calendar.py:255(TextCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:28(IllegalWeekdayError) + 1 0.000 0.000 0.000 0.000 calendar.py:372(HTMLCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:47(_localized_month) + 1 0.000 0.000 0.000 0.000 calendar.py:484(TimeEncoding) + 1 0.000 0.000 0.000 0.000 calendar.py:496(LocaleTextCalendar) + 2 0.000 0.000 0.000 0.000 calendar.py:52(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:531(LocaleHTMLCalendar) + 1 0.002 0.002 0.002 0.002 calendar.py:6() + 1 0.000 0.000 0.000 0.000 calendar.py:66(_localized_day) + 2 0.000 0.000 0.000 0.000 calendar.py:71(__init__) + 1 0.000 0.000 0.000 0.000 certs.py:13() + 1 0.000 0.000 0.000 0.000 certs.py:18(where) + 1 0.012 0.012 0.044 0.044 cgi.py:16() + 869 0.006 0.000 0.009 0.000 cgi.py:292(_parseparam) + 290 0.009 0.000 0.019 0.000 cgi.py:304(parse_header) + 1 0.000 0.000 0.000 0.000 cgi.py:328(MiniFieldStorage) + 1 0.000 0.000 0.000 0.000 cgi.py:353(FieldStorage) + 1 0.000 0.000 0.000 0.000 cgi.py:775(FormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:795(SvFormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:829(InterpFormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:857(FormContent) + 2 0.000 0.000 0.000 0.000 codecs.py:77(__new__) + 1 0.001 0.001 0.001 0.001 collections.py:1() + 3 0.004 0.001 0.005 0.002 collections.py:13(namedtuple) + 145 0.000 0.000 0.000 0.000 collections.py:43() + 21 0.000 0.000 0.000 0.000 collections.py:60() + 21 0.000 0.000 0.000 0.000 collections.py:61() + 1 0.007 0.007 0.285 0.285 compat.py:5() + 1 0.000 0.000 0.000 0.000 connectionpool.py:112(ConnectionPool) + 3 0.000 0.000 0.000 0.000 connectionpool.py:121(__init__) + 1 0.000 0.000 0.000 0.000 connectionpool.py:130(HTTPConnectionPool) + 3 0.000 0.000 0.002 0.001 connectionpool.py:171(__init__) + 30 0.001 0.000 0.003 0.000 connectionpool.py:189(_new_conn) + 320 0.010 0.000 0.041 0.000 connectionpool.py:200(_get_conn) + 290 0.002 0.000 0.017 0.000 connectionpool.py:233(_put_conn) + 320/1 0.016 0.000 3.136 3.136 connectionpool.py:261(_make_request) + 320/1 0.019 0.000 3.136 3.136 connectionpool.py:325(urlopen) + 1 0.000 0.000 0.000 0.000 connectionpool.py:497(HTTPSConnectionPool) + 1 0.007 0.007 0.162 0.162 connectionpool.py:7() + 1 0.000 0.000 0.000 0.000 connectionpool.py:74(VerifiedHTTPSConnection) + 2060 0.015 0.000 0.037 0.000 cookielib.py:1175(vals_sorted_by_key) + 2060 0.007 0.000 0.044 0.000 cookielib.py:1180(deepvalues) + 1 0.000 0.000 0.000 0.000 cookielib.py:1199(Absent) + 1 0.000 0.000 0.002 0.002 cookielib.py:1201(CookieJar) + 1208 0.021 0.000 0.058 0.000 cookielib.py:1217(__init__) + 320 0.002 0.000 0.002 0.000 cookielib.py:1246(_cookies_for_request) + 320 0.002 0.000 0.004 0.000 cookielib.py:1253(_cookie_attrs) + 320 0.012 0.000 0.051 0.000 cookielib.py:1312(add_cookie_header) + 290 0.004 0.000 0.035 0.000 cookielib.py:1555(make_cookies) + 290 0.009 0.000 0.057 0.000 cookielib.py:1635(extract_cookies) + 320 0.005 0.000 0.022 0.000 cookielib.py:1691(clear_expired_cookies) + 2060 0.008 0.000 0.008 0.000 cookielib.py:1710(__iter__) + 1 0.000 0.000 0.000 0.000 cookielib.py:1731(LoadError) + 1 0.000 0.000 0.000 0.000 cookielib.py:1733(FileCookieJar) + 1 0.003 0.003 0.053 0.053 cookielib.py:26() + 610 0.001 0.000 0.001 0.000 cookielib.py:43(_debug) + 1 0.000 0.000 0.000 0.000 cookielib.py:707(Cookie) + 1 0.000 0.000 0.000 0.000 cookielib.py:805(CookiePolicy) + 1 0.000 0.000 0.000 0.000 cookielib.py:838(DefaultCookiePolicy) + 1208 0.007 0.000 0.007 0.000 cookielib.py:848(__init__) + 320 0.005 0.000 0.091 0.000 cookies.py:108(get_cookie_header) + 1 0.000 0.000 0.000 0.000 cookies.py:131(CookieConflictError) + 1 0.000 0.000 0.000 0.000 cookies.py:136(RequestsCookieJar) + 1 0.000 0.000 0.000 0.000 cookies.py:20(MockRequest) + 1740 0.016 0.000 0.069 0.000 cookies.py:257(update) + 320 0.002 0.000 0.042 0.000 cookies.py:309(copy) + 610 0.008 0.000 0.065 0.000 cookies.py:32(__init__) + 888 0.015 0.000 0.055 0.000 cookies.py:374(cookiejar_from_dict) + 320 0.000 0.000 0.000 0.000 cookies.py:65(get_new_headers) + 1 0.000 0.000 0.001 0.001 cookies.py:7() + 1 0.000 0.000 0.000 0.000 cookies.py:73(MockResponse) + 290 0.001 0.000 0.001 0.000 cookies.py:80(__init__) + 580 0.001 0.000 0.001 0.000 cookies.py:87(info) + 290 0.005 0.000 0.094 0.000 cookies.py:94(extract_cookies_to_jar) + 1 0.001 0.001 0.031 0.031 decoder.py:2() + 1 0.000 0.000 0.007 0.007 decoder.py:244(JSONDecoder) + 1 0.000 0.000 0.000 0.000 decoder.py:276(__init__) + 1 0.000 0.000 0.000 0.000 dns.py:27(DNSError) + 30/1 0.000 0.000 0.000 0.000 dns.py:46(resolve_ipv4) + 1 0.000 0.000 0.000 0.000 dns.py:7() + 1 0.000 0.000 0.000 0.000 encoder.py:119(__init__) + 1 0.000 0.000 0.004 0.004 encoder.py:2() + 1 0.000 0.000 0.000 0.000 encoder.py:87(JSONEncoder) + 1 0.001 0.001 0.001 0.001 exceptions.py:10() + 1 0.000 0.000 0.000 0.000 exceptions.py:10(HTTPError) + 1 0.000 0.000 0.000 0.000 exceptions.py:12(RequestException) + 1 0.000 0.000 0.000 0.000 exceptions.py:15(PoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:17(HTTPError) + 1 0.000 0.000 0.000 0.000 exceptions.py:26(ConnectionError) + 1 0.000 0.000 0.000 0.000 exceptions.py:26(SSLError) + 1 0.000 0.000 0.000 0.000 exceptions.py:30(SSLError) + 1 0.000 0.000 0.000 0.000 exceptions.py:31(DecodeError) + 1 0.000 0.000 0.000 0.000 exceptions.py:34(Timeout) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(MaxRetryError) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(URLRequired) + 1 0.000 0.000 0.000 0.000 exceptions.py:42(TooManyRedirects) + 1 0.000 0.000 0.000 0.000 exceptions.py:46(MissingSchema) + 1 0.000 0.000 0.000 0.000 exceptions.py:50(InvalidSchema) + 1 0.000 0.000 0.000 0.000 exceptions.py:54(HostChangedError) + 1 0.000 0.000 0.000 0.000 exceptions.py:54(InvalidURL) + 1 0.000 0.000 0.000 0.000 exceptions.py:65(TimeoutError) + 1 0.000 0.000 0.000 0.000 exceptions.py:70(EmptyPoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:75(ClosedPoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:80(LocationParseError) + 1 0.001 0.001 0.001 0.001 exceptions.py:9() + 1 0.005 0.005 0.133 0.133 filepost.py:7() + 652 0.010 0.000 0.021 0.000 genericpath.py:15(exists) + 6 0.000 0.000 0.001 0.000 gettext.py:130(_expand_lang) + 3 0.000 0.000 0.002 0.001 gettext.py:421(find) + 3 0.000 0.000 0.002 0.001 gettext.py:461(translation) + 3 0.001 0.000 0.002 0.001 gettext.py:527(dgettext) + 3 0.000 0.000 0.002 0.001 gettext.py:565(gettext) + 1 0.001 0.001 0.401 0.401 grbrute.py:1() + 1 0.000 0.000 0.000 0.000 grbrute.py:20(SessionQueue) + 3 0.000 0.000 0.002 0.001 grbrute.py:21(__init__) + 320 0.007 0.000 0.061 0.000 grbrute.py:27(add) + 290/1 0.013 0.000 3.133 3.133 grbrute.py:33(_cb_response_session) + 1 0.000 0.000 0.000 0.000 grbrute.py:42(Grbrute) + 2/1 0.000 0.000 3.163 3.163 grbrute.py:47(__init__) + 291 0.010 0.000 0.082 0.000 grbrute.py:65(_send) + 290/1 0.010 0.000 3.133 3.133 grbrute.py:82(_cb_response) + 1 0.000 0.000 0.000 0.000 greenlet.py:114(SuccessGreenletLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:127(FailureGreenletLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:140(Greenlet) + 320 0.008 0.000 0.009 0.000 greenlet.py:146(__init__) + 1 0.000 0.000 0.000 0.000 greenlet.py:16(SpawnedLink) + 933 0.002 0.000 0.002 0.000 greenlet.py:160(ready) + 320 0.001 0.000 0.001 0.000 greenlet.py:164(successful) + 55 0.011 0.000 89.067 1.619 greenlet.py:202(throw) + 320 0.001 0.000 0.001 0.000 greenlet.py:23(__init__) + 320 0.003 0.000 0.003 0.000 greenlet.py:236(start) + 60 0.000 0.000 0.000 0.000 greenlet.py:284(kill) + 1 0.001 0.001 0.003 0.003 greenlet.py:3() + 320 0.001 0.000 0.002 0.000 greenlet.py:30(__hash__) + 320 0.006 0.000 0.006 0.000 greenlet.py:361(_report_result) + 320/1 0.018 0.000 3.158 3.158 greenlet.py:384(run) + 933 0.007 0.000 0.014 0.000 greenlet.py:400(rawlink) + 320 0.004 0.000 0.011 0.000 greenlet.py:411(link) + 320 0.001 0.000 0.012 0.000 greenlet.py:455(link_exception) + 320 0.007 0.000 0.018 0.000 greenlet.py:459(_notify_links) + 1 0.000 0.000 0.000 0.000 greenlet.py:47(SuccessSpawnedLink) + 55 0.001 0.000 89.072 1.619 greenlet.py:475(_kill) + 7 0.006 0.001 3.174 0.453 greenlet.py:480(joinall) + 1 0.000 0.000 0.000 0.000 greenlet.py:540(LinkedExited) + 1 0.000 0.000 0.000 0.000 greenlet.py:544(LinkedCompleted) + 1 0.000 0.000 0.000 0.000 greenlet.py:555(LinkedKilled) + 1 0.000 0.000 0.000 0.000 greenlet.py:568(LinkedFailed) + 1 0.000 0.000 0.000 0.000 greenlet.py:59(FailureSpawnedLink) + 320 0.001 0.000 0.002 0.000 greenlet.py:66(__call__) + 1 0.000 0.000 0.000 0.000 greenlet.py:71(GreenletLink) + 320 0.004 0.000 0.050 0.000 grequests.py:112(send) + 1 0.004 0.004 0.029 0.029 grequests.py:14() + 1 0.000 0.000 0.000 0.000 grequests.py:69(AsyncRequest) + 320 0.003 0.000 0.004 0.000 grequests.py:78(__init__) + 320/1 0.016 0.000 3.137 3.137 grequests.py:97(send) + 1 0.000 0.000 0.000 0.000 gzip.py:35(GzipFile) + 1 0.000 0.000 0.000 0.000 gzip.py:4() + 10 0.000 0.000 0.000 0.000 hashlib.py:109() + 1 0.001 0.001 0.001 0.001 hashlib.py:55() + 1 0.001 0.001 0.001 0.001 heapq.py:31() + 1 0.000 0.000 0.000 0.000 hooks.py:14() + 918 0.002 0.000 0.002 0.000 hooks.py:20(default_hooks) + 290/1 0.010 0.000 3.135 3.135 hooks.py:29(dispatch_hook) + 1 0.000 0.000 0.000 0.000 httplib.py:1004(HTTP) + 1 0.000 0.000 0.000 0.000 httplib.py:1098(HTTPSConnection) + 1 0.000 0.000 0.000 0.000 httplib.py:1120(HTTPS) + 1 0.000 0.000 0.000 0.000 httplib.py:1153(HTTPException) + 1 0.000 0.000 0.000 0.000 httplib.py:1158(NotConnected) + 1 0.000 0.000 0.000 0.000 httplib.py:1161(InvalidURL) + 1 0.000 0.000 0.000 0.000 httplib.py:1164(UnknownProtocol) + 1 0.000 0.000 0.000 0.000 httplib.py:1169(UnknownTransferEncoding) + 1 0.000 0.000 0.000 0.000 httplib.py:1172(UnimplementedFileMode) + 1 0.000 0.000 0.000 0.000 httplib.py:1175(IncompleteRead) + 1 0.000 0.000 0.000 0.000 httplib.py:1189(ImproperConnectionState) + 1 0.000 0.000 0.000 0.000 httplib.py:1192(CannotSendRequest) + 1 0.000 0.000 0.000 0.000 httplib.py:1195(CannotSendHeader) + 1 0.000 0.000 0.000 0.000 httplib.py:1198(ResponseNotReady) + 1 0.000 0.000 0.000 0.000 httplib.py:1201(BadStatusLine) + 1 0.000 0.000 0.000 0.000 httplib.py:1209(LineAndFileWrapper) + 1 0.000 0.000 0.000 0.000 httplib.py:214(HTTPMessage) + 1742 0.008 0.000 0.010 0.000 httplib.py:216(addheader) + 290 0.065 0.000 0.924 0.003 httplib.py:230(readheaders) + 1 0.000 0.000 0.000 0.000 httplib.py:319(HTTPResponse) + 320 0.004 0.000 0.024 0.000 httplib.py:329(__init__) + 320/1 0.011 0.000 3.136 3.136 httplib.py:347(_read_status) + 320/1 0.027 0.000 3.136 3.136 httplib.py:384(begin) + 290 0.002 0.000 0.007 0.000 httplib.py:467(_check_close) + 580 0.005 0.000 0.010 0.000 httplib.py:497(close) + 875 0.001 0.000 0.001 0.000 httplib.py:502(isclosed) + 585/537 0.005 0.000 0.033 0.000 httplib.py:513(read) + 290 0.004 0.000 0.006 0.000 httplib.py:631(getheaders) + 1 0.000 0.000 0.000 0.000 httplib.py:638(HTTPConnection) + 30 0.000 0.000 0.000 0.000 httplib.py:649(__init__) + 1 0.002 0.002 0.002 0.002 httplib.py:67() + 30 0.000 0.000 0.000 0.000 httplib.py:678(_set_hostport) + 30/1 0.000 0.000 0.000 0.000 httplib.py:717(connect) + 320/291 0.006 0.000 0.033 0.000 httplib.py:735(send) + 1600 0.005 0.000 0.006 0.000 httplib.py:765(_output) + 320/291 0.004 0.000 0.037 0.000 httplib.py:772(_send_output) + 320 0.015 0.000 0.023 0.000 httplib.py:782(putrequest) + 1280 0.007 0.000 0.011 0.000 httplib.py:889(putheader) + 320/291 0.003 0.000 0.180 0.001 httplib.py:900(endheaders) + 320/291 0.002 0.000 0.224 0.001 httplib.py:910(request) + 320/291 0.011 0.000 0.223 0.001 httplib.py:922(_send_request) + 320/1 0.016 0.000 3.136 3.136 httplib.py:956(getresponse) + 1064 0.003 0.000 0.003 0.000 hub.py:115(get_hub) + 1 0.000 0.000 0.000 0.000 hub.py:132(Hub) + 1 0.000 0.000 0.000 0.000 hub.py:138(__init__) + 693/2 0.025 0.000 0.000 0.000 hub.py:142(switch) + 1 0.000 0.000 0.000 0.000 hub.py:200(DispatchExit) + 1 0.000 0.000 0.000 0.000 hub.py:207(Waiter) + 106 0.000 0.000 0.000 0.000 hub.py:243(__init__) + 105 0.002 0.000 0.004 0.000 hub.py:270(switch) + 30 0.001 0.000 0.006 0.000 hub.py:282(switch_args) + 51/21 0.002 0.000 0.001 0.000 hub.py:296(get) + 1 0.000 0.000 0.001 0.001 hub.py:3() + 1 0.000 0.000 0.000 0.000 hub.py:317(_NONE) + 290/1 0.010 0.000 0.000 0.000 hub.py:61(sleep) + 1 0.000 0.000 0.000 0.000 hub.py:95(signal) + 1 0.000 0.000 0.000 0.000 idna.py:146(Codec) + 320 0.009 0.000 0.026 0.000 idna.py:147(encode) + 1 0.000 0.000 0.000 0.000 idna.py:197(IncrementalEncoder) + 1 0.000 0.000 0.000 0.000 idna.py:231(IncrementalDecoder) + 1 0.000 0.000 0.000 0.000 idna.py:271(StreamWriter) + 1 0.000 0.000 0.000 0.000 idna.py:274(StreamReader) + 1 0.000 0.000 0.000 0.000 idna.py:279(getregentry) + 1 0.001 0.001 0.016 0.016 idna.py:3() + 960 0.005 0.000 0.009 0.000 idna.py:62(ToASCII) + 1 0.000 0.000 0.000 0.000 io.py:1032(BufferedWriter) + 1 0.000 0.000 0.000 0.000 io.py:1121(BufferedRWPair) + 1 0.000 0.000 0.000 0.000 io.py:1187(BufferedRandom) + 1 0.000 0.000 0.000 0.000 io.py:1255(TextIOBase) + 1 0.000 0.000 0.000 0.000 io.py:1303(IncrementalNewlineDecoder) + 1 0.000 0.000 0.000 0.000 io.py:1379(TextIOWrapper) + 1 0.000 0.000 0.000 0.000 io.py:1880(StringIO) + 1 0.000 0.000 0.000 0.000 io.py:267(_DocDescriptor) + 1 0.000 0.000 0.000 0.000 io.py:276(OpenWrapper) + 1 0.000 0.000 0.000 0.000 io.py:290(UnsupportedOperation) + 1 0.000 0.000 0.000 0.000 io.py:294(IOBase) + 1 0.003 0.003 0.005 0.005 io.py:35() + 1 0.000 0.000 0.000 0.000 io.py:566(RawIOBase) + 1 0.000 0.000 0.000 0.000 io.py:621(FileIO) + 1 0.000 0.000 0.000 0.000 io.py:643(BufferedIOBase) + 1 0.000 0.000 0.000 0.000 io.py:715(_BufferedIOMixin) + 1 0.000 0.000 0.000 0.000 io.py:72(BlockingIOError) + 1 0.000 0.000 0.000 0.000 io.py:789(_BytesIO) + 1 0.000 0.000 0.000 0.000 io.py:900(BytesIO) + 1 0.000 0.000 0.000 0.000 io.py:907(BufferedReader) + 1 0.000 0.000 0.000 0.000 keyword.py:11() + 6 0.000 0.000 0.000 0.000 locale.py:316(normalize) + 1 0.004 0.004 0.009 0.009 mimetools.py:1() + 1 0.000 0.000 0.000 0.000 mimetools.py:20(Message) + 290 0.012 0.000 0.966 0.003 mimetools.py:24(__init__) + 290 0.007 0.000 0.014 0.000 mimetools.py:33(parsetype) + 290 0.007 0.000 0.009 0.000 mimetools.py:50(parseplist) + 1 0.000 0.000 0.002 0.002 mimetypes.py:23() + 1 0.002 0.002 0.002 0.002 mimetypes.py:324(_default_mime_types) + 1 0.000 0.000 0.000 0.000 mimetypes.py:50(MimeTypes) + 1 0.000 0.000 0.000 0.000 models.py:135(RequestHooksMixin) + 320 0.004 0.000 0.011 0.000 models.py:136(register_hook) + 1 0.000 0.000 0.000 0.000 models.py:156(Request) + 320 0.006 0.000 0.007 0.000 models.py:179(__init__) + 320 0.012 0.000 0.364 0.001 models.py:214(prepare) + 1 0.000 0.000 0.000 0.000 models.py:233(PreparedRequest) + 595 0.003 0.000 0.005 0.000 models.py:252(__init__) + 320 0.001 0.000 0.002 0.000 models.py:267(prepare_method) + 320 0.017 0.000 0.154 0.000 models.py:273(prepare_url) + 320 0.010 0.000 0.020 0.000 models.py:323(prepare_headers) + 1280 0.006 0.000 0.010 0.000 models.py:327() + 320 0.006 0.000 0.020 0.000 models.py:332(prepare_body) + 1 0.000 0.000 0.000 0.000 models.py:36(RequestEncodingMixin) + 320 0.004 0.000 0.008 0.000 models.py:37(path_url) + 320 0.002 0.000 0.003 0.000 models.py:389(prepare_content_length) + 320 0.005 0.000 0.019 0.000 models.py:401(prepare_auth) + 320 0.007 0.000 0.121 0.000 models.py:423(prepare_cookies) + 320 0.003 0.000 0.016 0.000 models.py:436(prepare_hooks) + 1 0.000 0.000 0.000 0.000 models.py:442(Response) + 290 0.010 0.000 0.026 0.000 models.py:447(__init__) + 290 0.003 0.000 0.010 0.000 models.py:515(iter_content) + 585/537 0.004 0.000 0.250 0.000 models.py:526(generate) + 290/266 0.004 0.000 0.169 0.001 models.py:567(content) + 320 0.005 0.000 0.020 0.000 models.py:58(_encode_params) + 1 0.001 0.001 0.003 0.003 models.py:8() + 1 0.000 0.000 0.000 0.000 monkey.py:17(patch_time) + 1 0.000 0.000 0.000 0.000 monkey.py:3() + 1 0.001 0.001 0.016 0.016 monkey.py:44(patch_socket) + 1 0.000 0.000 0.000 0.000 monkey.py:61(patch_dns) + 1 0.000 0.000 0.000 0.000 monkey.py:68(patch_ssl) + 1 0.000 0.000 0.000 0.000 monkey.py:8(patch_os) + 1 0.000 0.000 0.016 0.016 monkey.py:95(patch_all) + 1 0.001 0.001 0.001 0.001 netrc.py:1() + 1 0.000 0.000 0.000 0.000 netrc.py:10(NetrcParseError) + 1 0.000 0.000 0.000 0.000 netrc.py:22(netrc) + 640 0.005 0.000 0.007 0.000 ordered_dict.py:117(keys) + 1280 0.006 0.000 0.009 0.000 ordered_dict.py:125(items) + 1926 0.047 0.000 0.075 0.000 ordered_dict.py:143(update) + 1 0.000 0.000 0.000 0.000 ordered_dict.py:17(OrderedDict) + 320 0.004 0.000 0.010 0.000 ordered_dict.py:178(pop) + 640 0.005 0.000 0.044 0.000 ordered_dict.py:221(copy) + 1926 0.045 0.000 0.122 0.000 ordered_dict.py:29(__init__) + 1600 0.022 0.000 0.022 0.000 ordered_dict.py:45(__setitem__) + 317 0.005 0.000 0.006 0.000 ordered_dict.py:55(__delitem__) + 1 0.000 0.000 0.000 0.000 ordered_dict.py:6() + 4480 0.008 0.000 0.008 0.000 ordered_dict.py:64(__iter__) + 1 0.000 0.000 0.000 0.000 os.py:35(_get_exports_list) + 1 0.000 0.000 0.000 0.000 os.py:747(urandom) + 1 0.000 0.000 0.029 0.029 platform.py:10() + 1 0.000 0.000 0.005 0.005 platform.py:1007(_syscmd_uname) + 7 0.000 0.000 0.005 0.001 platform.py:1151(uname) + 4 0.000 0.000 0.005 0.001 platform.py:1288(system) + 3 0.000 0.000 0.000 0.000 platform.py:1307(release) + 6 0.000 0.000 0.000 0.000 platform.py:1364(_sys_version) + 3 0.000 0.000 0.000 0.000 platform.py:1467(python_implementation) + 3 0.000 0.000 0.000 0.000 platform.py:1479(python_version) + 1 0.000 0.000 0.000 0.000 platform.py:390(_popen) + 1 0.000 0.000 0.000 0.000 pool.py:11(GreenletSet) + 1 0.000 0.000 0.000 0.000 pool.py:172(Pool) + 1 0.000 0.000 0.000 0.000 pool.py:174(__init__) + 1 0.000 0.000 0.000 0.000 pool.py:18(__init__) + 320 0.002 0.000 0.020 0.000 pool.py:189(start) + 320 0.005 0.000 0.033 0.000 pool.py:196(spawn) + 320 0.002 0.000 0.005 0.000 pool.py:201(discard) + 1 0.000 0.000 0.001 0.001 pool.py:208(kill) + 1 0.000 0.000 0.000 0.000 pool.py:220(pass_value) + 1 0.000 0.000 0.000 0.000 pool.py:3() + 320 0.003 0.000 0.014 0.000 pool.py:43(add) + 320 0.002 0.000 0.003 0.000 pool.py:47(discard) + 2/1 0.000 0.000 3.163 3.163 pool.py:76(join) + 1 0.000 0.000 0.001 0.001 pool.py:88(kill) + 320 0.004 0.000 0.051 0.000 poolmanager.py:104(connection_from_url) + 1 0.000 0.000 0.000 0.000 poolmanager.py:147(ProxyManager) + 1 0.000 0.000 0.000 0.000 poolmanager.py:27(PoolManager) + 6 0.000 0.000 0.001 0.000 poolmanager.py:55(__init__) + 3 0.000 0.000 0.002 0.001 poolmanager.py:61(_new_pool) + 1 0.000 0.000 0.002 0.002 poolmanager.py:7() + 320 0.003 0.000 0.026 0.000 poolmanager.py:81(connection_from_host) + 1 0.000 0.000 0.000 0.000 posixpath.py:109(basename) + 1 0.000 0.000 0.000 0.000 posixpath.py:117(dirname) + 640 0.012 0.000 0.019 0.000 posixpath.py:248(expanduser) + 1 0.000 0.000 0.000 0.000 posixpath.py:42(normcase) + 13 0.000 0.000 0.000 0.000 posixpath.py:59(join) + 2/1 0.003 0.002 3.163 3.163 pphidden_async.py:1() + 320 0.009 0.000 0.009 0.000 pphidden_async.py:19(next) + 290 0.010 0.000 0.010 0.000 pphidden_async.py:29(cb_response) + 1 0.000 0.000 0.000 0.000 pphidden_async.py:7(Pp_url) + 1 0.000 0.000 0.000 0.000 pphidden_async.py:8(__init__) + 1 0.000 0.000 0.000 0.000 pprint.py:35() + 1 0.000 0.000 0.000 0.000 pprint.py:81(PrettyPrinter) + 293 0.002 0.000 0.007 0.000 queue.py:147(get) + 1 0.001 0.001 0.001 0.001 queue.py:16() + 20 0.001 0.000 0.003 0.000 queue.py:193(_unlock) + 293 0.001 0.000 0.001 0.000 queue.py:229(_schedule_unlock) + 1 0.000 0.000 0.000 0.000 queue.py:235(ItemWaiter) + 1 0.000 0.000 0.000 0.000 queue.py:243(PriorityQueue) + 1 0.000 0.000 0.000 0.000 queue.py:259(LifoQueue) + 1 0.000 0.000 0.000 0.000 queue.py:272(JoinableQueue) + 1 0.000 0.000 0.000 0.000 queue.py:31(Queue) + 7 0.000 0.000 0.000 0.000 queue.py:41(__init__) + 7 0.000 0.000 0.000 0.000 queue.py:53(_init) + 293 0.001 0.000 0.001 0.000 queue.py:56(_get) + 293 0.001 0.000 0.001 0.000 queue.py:59(_put) + 334 0.002 0.000 0.003 0.000 queue.py:80(qsize) + 293 0.002 0.000 0.004 0.000 queue.py:95(put) + 1 0.001 0.001 0.001 0.001 random.py:40() + 1 0.000 0.000 0.000 0.000 random.py:643(WichmannHill) + 1 0.000 0.000 0.000 0.000 random.py:71(Random) + 1 0.000 0.000 0.000 0.000 random.py:793(SystemRandom) + 1 0.000 0.000 0.000 0.000 random.py:90(__init__) + 1 0.000 0.000 0.000 0.000 random.py:99(seed) + 1 0.000 0.000 0.002 0.002 re.py:134(match) + 2 0.000 0.000 0.102 0.051 re.py:139(search) + 54 0.000 0.000 0.125 0.002 re.py:188(compile) + 2 0.000 0.000 0.000 0.000 re.py:206(escape) + 57 0.002 0.000 0.136 0.002 re.py:229(_compile) + 1 0.000 0.000 0.000 0.000 request.py:18(RequestMethods) + 9 0.000 0.000 0.000 0.000 request.py:50(__init__) + 1 0.000 0.000 0.133 0.133 request.py:7() + 585/537 0.015 0.000 0.246 0.000 response.py:112(read) + 290 0.017 0.000 0.035 0.000 response.py:176(from_httplib) + 1 0.000 0.000 0.000 0.000 response.py:32(HTTPResponse) + 290 0.006 0.000 0.008 0.000 response.py:60(__init__) + 1 0.002 0.002 0.003 0.003 response.py:7() + 580 0.004 0.000 0.021 0.000 response.py:96(release_conn) + 1742 0.016 0.000 0.022 0.000 rfc822.py:197(isheader) + 2032 0.003 0.000 0.003 0.000 rfc822.py:209(islast) + 2032 0.003 0.000 0.003 0.000 rfc822.py:219(iscomment) + 580 0.018 0.000 0.028 0.000 rfc822.py:228(getallmatchingheaders) + 1740 0.010 0.000 0.014 0.000 rfc822.py:285(getheader) + 580 0.003 0.000 0.031 0.000 rfc822.py:295(getheaders) + 290 0.001 0.000 0.002 0.000 rfc822.py:454(items) + 1 0.000 0.000 0.000 0.000 rfc822.py:496(AddrlistClass) + 1 0.000 0.000 0.000 0.000 rfc822.py:71() + 1 0.000 0.000 0.000 0.000 rfc822.py:770(AddressList) + 1 0.000 0.000 0.000 0.000 rfc822.py:85(Message) + 290 0.002 0.000 0.926 0.003 rfc822.py:88(__init__) + 1 0.000 0.000 0.000 0.000 scanner.py:17(Scanner) + 2 0.000 0.000 0.023 0.011 scanner.py:18(__init__) + 1 0.000 0.000 0.000 0.000 scanner.py:3() + 5 0.000 0.000 0.000 0.000 scanner.py:64(pattern) + 5 0.000 0.000 0.006 0.001 scanner.py:65(decorator) + 1 0.001 0.001 0.002 0.002 sessions.py:10() + 1 0.000 0.000 0.000 0.000 sessions.py:170(Session) + 3 0.000 0.000 0.002 0.001 sessions.py:188(__init__) + 320/1 0.012 0.000 3.137 3.137 sessions.py:241(request) + 2560 0.021 0.000 0.201 0.000 sessions.py:36(merge_kwargs) + 320/1 0.021 0.000 3.136 3.136 sessions.py:430(send) + 320 0.002 0.000 0.004 0.000 sessions.py:485(get_adapter) + 6 0.000 0.000 0.000 0.000 sessions.py:500(mount) + 320 0.002 0.000 0.006 0.000 sessions.py:59(get_original_key) + 1 0.000 0.000 0.000 0.000 sessions.py:81(SessionRedirectMixin) + 275 0.009 0.000 0.055 0.000 sessions.py:82(resolve_redirects) + 1 0.000 0.000 0.000 0.000 shlex.py:2() + 1 0.000 0.000 0.000 0.000 shlex.py:21(shlex) + 1 0.001 0.001 0.002 0.002 six.py:1() + 1 0.000 0.000 0.000 0.000 six.py:106(MovedAttribute) + 9 0.000 0.000 0.000 0.000 six.py:108(__init__) + 1 0.000 0.000 0.000 0.000 six.py:126(_resolve) + 1 0.000 0.000 0.000 0.000 six.py:132(_MovedItems) + 1 0.000 0.000 0.000 0.000 six.py:247(Iterator) + 1 0.000 0.000 0.000 0.000 six.py:317(exec_) + 1 0.000 0.000 0.000 0.000 six.py:53(X) + 1 0.000 0.000 0.000 0.000 six.py:54(__len__) + 4 0.000 0.000 0.000 0.000 six.py:67(_add_doc) + 1 0.000 0.000 0.000 0.000 six.py:72(_import_module) + 1 0.000 0.000 0.000 0.000 six.py:78(_LazyDescr) + 40 0.000 0.000 0.000 0.000 six.py:80(__init__) + 1 0.000 0.000 0.000 0.000 six.py:83(__get__) + 1 0.000 0.000 0.000 0.000 six.py:91(MovedModule) + 31 0.000 0.000 0.000 0.000 six.py:93(__init__) + 322 0.008 0.000 0.025 0.000 socket.py:128(_wait_helper) + 322/1 0.004 0.000 0.000 0.000 socket.py:136(wait_read) + 30/1 0.000 0.000 0.000 0.000 socket.py:154(wait_readwrite) + 1 0.000 0.000 0.000 0.000 socket.py:164(_closedsocket) + 1 0.004 0.004 0.004 0.004 socket.py:176(_socketobject) + 1 0.000 0.000 0.000 0.000 socket.py:186(_closedsocket) + 1 0.001 0.001 0.001 0.001 socket.py:199(socket) + 350 0.004 0.000 0.008 0.000 socket.py:201(__init__) + 1 0.000 0.000 0.000 0.000 socket.py:226(_fileobject) + 320 0.003 0.000 0.004 0.000 socket.py:237(__init__) + 610 0.004 0.000 0.005 0.000 socket.py:267(close) + 30/1 0.087 0.003 0.000 0.000 socket.py:269(connect) + 320 0.001 0.000 0.002 0.000 socket.py:276(__del__) + 320 0.001 0.000 0.001 0.000 socket.py:283(flush) + 320 0.006 0.000 0.013 0.000 socket.py:315(dup) + 1 0.005 0.005 0.015 0.015 socket.py:32() + 320 0.003 0.000 0.020 0.000 socket.py:321(makefile) + 74636/1 0.330 0.000 3.136 3.136 socket.py:324(recv) + 295/271 0.011 0.000 0.019 0.000 socket.py:333(read) + 320 0.002 0.000 0.021 0.000 socket.py:365(send) + 320 0.006 0.000 0.028 0.000 socket.py:382(sendall) + 2352/1 0.327 0.000 3.136 3.136 socket.py:403(readline) + 350 0.001 0.000 0.001 0.000 socket.py:422(settimeout) + 1 0.004 0.004 0.008 0.008 socket.py:44() + 30/1 0.001 0.000 0.000 0.000 socket.py:534(create_connection) + 30 0.000 0.000 0.000 0.000 socket.py:579(gethostbyname) + 30/1 0.002 0.000 0.013 0.013 socket.py:603(getaddrinfo) + 179 0.003 0.000 0.028 0.000 sre_compile.py:184(_compile_charset) + 179 0.010 0.000 0.024 0.000 sre_compile.py:213(_optimize_charset) + 318 0.000 0.000 0.000 0.000 sre_compile.py:24(_identityfunction) + 17 0.003 0.000 0.003 0.000 sre_compile.py:264(_mk_bitmap) + 2 0.007 0.003 0.012 0.006 sre_compile.py:307(_optimize_unicode) + 175 0.001 0.000 0.002 0.000 sre_compile.py:360(_simple) + 55 0.002 0.000 0.019 0.000 sre_compile.py:367(_compile_info) + 422/55 0.016 0.000 0.048 0.001 sre_compile.py:38(_compile) + 108 0.001 0.000 0.001 0.000 sre_compile.py:480(isstring) + 55 0.001 0.000 0.067 0.001 sre_compile.py:486(_code) + 55 0.001 0.000 0.140 0.003 sre_compile.py:501(compile) + 20 0.000 0.000 0.000 0.000 sre_compile.py:57(fixup) + 847 0.007 0.000 0.007 0.000 sre_parse.py:132(__len__) + 4 0.000 0.000 0.000 0.000 sre_parse.py:134(__delitem__) + 1866 0.007 0.000 0.011 0.000 sre_parse.py:136(__getitem__) + 185 0.000 0.000 0.000 0.000 sre_parse.py:140(__setitem__) + 860 0.002 0.000 0.003 0.000 sre_parse.py:144(append) + 596/230 0.007 0.000 0.008 0.000 sre_parse.py:146(getwidth) + 64 0.000 0.000 0.001 0.000 sre_parse.py:184(__init__) + 2619 0.012 0.000 0.016 0.000 sre_parse.py:188(__next) + 1255 0.002 0.000 0.004 0.000 sre_parse.py:201(match) + 2257 0.009 0.000 0.023 0.000 sre_parse.py:207(get) + 11 0.000 0.000 0.000 0.000 sre_parse.py:211(tell) + 3 0.000 0.000 0.000 0.000 sre_parse.py:213(seek) + 12 0.000 0.000 0.000 0.000 sre_parse.py:216(isident) + 4 0.000 0.000 0.000 0.000 sre_parse.py:222(isname) + 130 0.001 0.000 0.001 0.000 sre_parse.py:231(_class_escape) + 147 0.001 0.000 0.001 0.000 sre_parse.py:263(_escape) + 184/64 0.003 0.000 0.073 0.001 sre_parse.py:307(_parse_sub) + 223/67 0.021 0.000 0.072 0.001 sre_parse.py:385(_parse) + 64/63 0.012 0.000 0.087 0.001 sre_parse.py:669(parse) + 66 0.000 0.000 0.000 0.000 sre_parse.py:73(__init__) + 90 0.000 0.000 0.000 0.000 sre_parse.py:78(opengroup) + 90 0.000 0.000 0.000 0.000 sre_parse.py:89(closegroup) + 1 0.000 0.000 0.000 0.000 sre_parse.py:91(checkgroup) + 441 0.002 0.000 0.002 0.000 sre_parse.py:96(__init__) + 1 0.000 0.000 0.001 0.001 ssl.py:13() + 1 0.001 0.001 0.002 0.002 ssl.py:56() + 1 0.001 0.001 0.001 0.001 ssl.py:58(SSLSocket) + 1 0.000 0.000 0.000 0.000 ssl.py:83(SSLSocket) + 1 0.001 0.001 0.001 0.001 status_codes.py:3() + 1 0.000 0.000 0.000 0.000 string.py:220(lower) + 1 0.000 0.000 0.000 0.000 string.py:248(strip) + 1 0.000 0.000 0.000 0.000 string.py:281(split) + 20 0.000 0.000 0.000 0.000 string.py:364(rfind) + 1 0.000 0.000 0.000 0.000 stringprep.py:6() + 1 0.000 0.000 0.000 0.000 structures.py:15(IteratorProxy) + 1 0.000 0.000 0.000 0.000 structures.py:36(CaseInsensitiveDict) + 1755 0.020 0.000 0.039 0.000 structures.py:42(lower_keys) + 3312 0.011 0.000 0.014 0.000 structures.py:45() + 1465 0.011 0.000 0.051 0.000 structures.py:60(__contains__) + 290 0.003 0.000 0.008 0.000 structures.py:63(__getitem__) + 580 0.004 0.000 0.037 0.000 structures.py:68(get) + 1 0.000 0.000 0.000 0.000 structures.py:75(LookupDict) + 1 0.000 0.000 0.000 0.000 structures.py:78(__init__) + 1 0.000 0.000 0.000 0.000 structures.py:9() + 1 0.000 0.000 0.000 0.000 tempfile.py:107(_RandomNameSequence) + 1 0.003 0.003 0.005 0.005 tempfile.py:18() + 1 0.000 0.000 0.000 0.000 tempfile.py:357(_TemporaryFileWrapper) + 1 0.000 0.000 0.000 0.000 tempfile.py:483(SpooledTemporaryFile) + 1 0.001 0.001 0.002 0.002 threading.py:1() + 1211 0.011 0.000 0.016 0.000 threading.py:101(__init__) + 939 0.012 0.000 0.018 0.000 threading.py:116(acquire) + 939 0.009 0.000 0.013 0.000 threading.py:136(release) + 11 0.000 0.000 0.000 0.000 threading.py:176(Condition) + 1 0.000 0.000 0.000 0.000 threading.py:179(_Condition) + 11 0.000 0.000 0.000 0.000 threading.py:181(__init__) + 641 0.003 0.000 0.005 0.000 threading.py:221(_is_owned) + 641 0.005 0.000 0.011 0.000 threading.py:272(notify) + 1 0.000 0.000 0.000 0.000 threading.py:290(notifyAll) + 1 0.000 0.000 0.000 0.000 threading.py:299(_Semaphore) + 1 0.000 0.000 0.000 0.000 threading.py:347(_BoundedSemaphore) + 1 0.000 0.000 0.000 0.000 threading.py:359(Event) + 1 0.000 0.000 0.000 0.000 threading.py:362(_Event) + 1 0.000 0.000 0.000 0.000 threading.py:366(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:376(set) + 1 0.000 0.000 0.000 0.000 threading.py:414(Thread) + 1 0.000 0.000 0.000 0.000 threading.py:426(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:510(_set_ident) + 1 0.000 0.000 0.000 0.000 threading.py:57(_Verbose) + 1224 0.003 0.000 0.003 0.000 threading.py:59(__init__) + 2519 0.005 0.000 0.005 0.000 threading.py:64(_note) + 1 0.000 0.000 0.000 0.000 threading.py:713(_Timer) + 1 0.000 0.000 0.000 0.000 threading.py:742(_MainThread) + 1 0.000 0.000 0.000 0.000 threading.py:744(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:752(_set_daemon) + 1 0.000 0.000 0.000 0.000 threading.py:783(_DummyThread) + 1211 0.015 0.000 0.031 0.000 threading.py:96(RLock) + 1 0.000 0.000 0.000 0.000 threading.py:99(_RLock) + 30 0.000 0.000 0.001 0.000 timeout.py:100(start_new) + 30 0.000 0.000 0.000 0.000 timeout.py:120(pending) + 30 0.000 0.000 0.000 0.000 timeout.py:128(cancel) + 1 0.000 0.000 0.000 0.000 timeout.py:14() + 1 0.000 0.000 0.000 0.000 timeout.py:32(Timeout) + 30 0.000 0.000 0.000 0.000 timeout.py:85(__init__) + 30 0.000 0.000 0.000 0.000 timeout.py:90(start) + 1 0.000 0.000 0.000 0.000 traceback.py:1() + 1 0.000 0.000 0.000 0.000 urllib.py:109(ContentTooShortError) + 1 0.000 0.000 0.000 0.000 urllib.py:115(URLopener) + 485 0.002 0.000 0.002 0.000 urllib.py:1168() + 320 0.005 0.000 0.013 0.000 urllib.py:1193(quote) + 320 0.005 0.000 0.007 0.000 urllib.py:1234(urlencode) + 1 0.004 0.004 0.024 0.024 urllib.py:23() + 1 0.000 0.000 0.000 0.000 urllib.py:615(FancyURLopener) + 1 0.000 0.000 0.000 0.000 urllib.py:845(ftpwrapper) + 1 0.000 0.000 0.000 0.000 urllib.py:923(addbase) + 1 0.000 0.000 0.000 0.000 urllib.py:952(addclosehook) + 1 0.000 0.000 0.000 0.000 urllib.py:967(addinfo) + 1 0.000 0.000 0.000 0.000 urllib.py:977(addinfourl) + 1 0.000 0.000 0.000 0.000 urllib2.py:1035(HTTPDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1053(ProxyDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1065(AbstractHTTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1167(HTTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1175(HTTPSHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1182(HTTPCookieProcessor) + 1 0.000 0.000 0.000 0.000 urllib2.py:1200(UnknownHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1258(FileHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1310(FTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:136(URLError) + 1 0.000 0.000 0.000 0.000 urllib2.py:1369(CacheFTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:149(HTTPError) + 1 0.000 0.000 0.000 0.000 urllib2.py:187(Request) + 1 0.000 0.000 0.000 0.000 urllib2.py:297(OpenerDirector) + 1 0.000 0.000 0.000 0.000 urllib2.py:480(BaseHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:499(HTTPErrorProcessor) + 1 0.000 0.000 0.000 0.000 urllib2.py:516(HTTPDefaultErrorHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:520(HTTPRedirectHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:686(ProxyHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:729(HTTPPasswordMgr) + 1 0.001 0.001 0.007 0.007 urllib2.py:76() + 1 0.000 0.000 0.000 0.000 urllib2.py:793(HTTPPasswordMgrWithDefaultRealm) + 1 0.000 0.000 0.004 0.004 urllib2.py:803(AbstractBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:857(HTTPBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:867(ProxyBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:895(AbstractDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urlparse.py:107(SplitResult) + 1 0.000 0.000 0.000 0.000 urlparse.py:115(ParseResult) + 2210 0.021 0.000 0.122 0.000 urlparse.py:123(urlparse) + 930 0.017 0.000 0.027 0.000 urlparse.py:146(_splitnetloc) + 2530 0.043 0.000 0.091 0.000 urlparse.py:154(urlsplit) + 320 0.001 0.000 0.003 0.000 urlparse.py:198(urlunparse) + 320 0.002 0.000 0.002 0.000 urlparse.py:208(urlunsplit) + 1 0.002 0.002 0.008 0.008 urlparse.py:26() + 485 0.002 0.000 0.002 0.000 urlparse.py:303() + 46 0.000 0.000 0.002 0.000 urlparse.py:59(clear_cache) + 1 0.000 0.000 0.000 0.000 urlparse.py:64(ResultMixin) + 320 0.001 0.000 0.001 0.000 urlparse.py:67(username) + 320 0.001 0.000 0.001 0.000 urlparse.py:77(password) + 610 0.003 0.000 0.008 0.000 utf_8.py:15(decode) + 2 0.001 0.000 0.112 0.056 util.py:182(_findSoname_ldconfig) + 1 0.000 0.000 0.000 0.000 util.py:2() + 2 0.000 0.000 0.112 0.056 util.py:206(find_library) + 290 0.004 0.000 0.012 0.000 util.py:235(is_connection_dropped) + 1 0.000 0.000 0.000 0.000 util.py:37(Url) + 1 0.000 0.000 0.000 0.000 util.py:4() + 1 0.000 0.000 0.000 0.000 util.py:4(wrap_errors) + 320 0.003 0.000 0.005 0.000 util.py:44(__new__) + 1 0.000 0.000 0.000 0.000 util.py:50(lazy_property) + 1 0.000 0.000 0.000 0.000 util.py:53(__init__) + 320 0.008 0.000 0.009 0.000 util.py:63(split_first) + 1 0.002 0.002 0.007 0.007 util.py:8() + 320 0.006 0.000 0.021 0.000 util.py:96(parse_url) + 1 0.004 0.004 0.363 0.363 utils.py:10() + 320 0.004 0.000 0.006 0.000 utils.py:118(to_key_val_list) + 290 0.004 0.000 0.056 0.000 utils.py:270(get_encoding_from_headers) + 290 0.002 0.000 0.007 0.000 utils.py:381(stream_untransfer) + 320 0.003 0.000 0.006 0.000 utils.py:397(unquote_unreserved) + 320 0.002 0.000 0.022 0.000 utils.py:415(requote_uri) + 320 0.011 0.000 0.050 0.000 utils.py:427(get_environ_proxies) + 320 0.002 0.000 0.005 0.000 utils.py:43(super_len) + 1920 0.018 0.000 0.039 0.000 utils.py:438() + 3 0.000 0.000 0.000 0.000 utils.py:462(default_user_agent) + 3 0.000 0.000 0.000 0.000 utils.py:493(default_headers) + 320 0.007 0.000 0.056 0.000 utils.py:52(get_netrc_auth) + 960 0.006 0.000 0.028 0.000 utils.py:56() + 640 0.005 0.000 0.014 0.000 utils.py:584(get_auth_from_url) + 1280 0.019 0.000 0.106 0.000 utils.py:95(from_key_val_list) + 4 0.000 0.000 0.000 0.000 uuid.py:101(__init__) + 1 0.001 0.001 0.120 0.120 uuid.py:45() + 1 0.000 0.000 0.000 0.000 uuid.py:53(UUID) + 2 0.000 0.000 0.000 0.000 warnings.py:14(warnpy3k) + 3 0.000 0.000 0.000 0.000 warnings.py:324(__init__) + 3 0.000 0.000 0.000 0.000 warnings.py:345(__enter__) + 3 0.000 0.000 0.000 0.000 warnings.py:361(__exit__) + 2 0.000 0.000 0.004 0.002 warnings.py:45(filterwarnings) + 11 0.002 0.000 0.017 0.002 {__import__} + 1 0.000 0.000 0.000 0.000 {_codecs.lookup} + 610 0.004 0.000 0.004 0.000 {_codecs.utf_8_decode} + 2 0.000 0.000 0.000 0.000 {_ctypes.POINTER} + 3 0.000 0.000 0.000 0.000 {_ctypes.dlopen} + 1 0.000 0.000 0.000 0.000 {_ctypes.set_conversion_mode} + 38 0.000 0.000 0.000 0.000 {_ctypes.sizeof} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_md5} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha1} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha224} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha256} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha384} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha512} + 350 0.000 0.000 0.000 0.000 {_socket.getdefaulttimeout} + 30 0.000 0.000 0.000 0.000 {_socket.inet_ntop} + 55 0.000 0.000 0.000 0.000 {_sre.compile} + 161 0.000 0.000 0.000 0.000 {_sre.getlower} + 20 0.000 0.000 0.000 0.000 {_struct.calcsize} + 341 0.001 0.000 0.001 0.000 {all} + 322 0.000 0.000 0.001 0.000 {any} + 1 0.000 0.000 0.000 0.000 {binascii.hexlify} + 323 0.001 0.000 0.001 0.000 {built-in method __enter__} + 3478 0.009 0.000 0.009 0.000 {built-in method __new__ of type object at 0x82f680} + 2222 0.006 0.000 0.006 0.000 {built-in method acquire} + 320 0.001 0.000 0.001 0.000 {built-in method fromkeys} + 2 0.000 0.000 0.000 0.000 {built-in method groups} + 2 0.000 0.000 0.000 0.000 {built-in method group} + 65 0.000 0.000 0.000 0.000 {built-in method match} + 290 0.002 0.000 0.002 0.000 {built-in method poll} + 290 0.003 0.000 0.005 0.000 {built-in method register} + 1581 0.002 0.000 0.002 0.000 {built-in method release} + 2 0.093 0.046 0.093 0.046 {built-in method search} + 320 0.005 0.000 0.005 0.000 {built-in method split} + 610 0.006 0.000 0.006 0.000 {built-in method utcnow} + 2967 0.004 0.000 0.004 0.000 {cStringIO.StringIO} + 1253 0.001 0.000 0.001 0.000 {callable} + 1768 0.002 0.000 0.002 0.000 {chr} + 1 0.000 0.000 0.000 0.000 {delattr} + 2 0.000 0.000 0.000 0.000 {dir} + 2/1 0.001 0.001 3.163 3.163 {execfile} + 2 0.000 0.000 0.000 0.000 {filter} + 1 0.000 0.000 0.000 0.000 {function seed at 0x1d496e0} + 3602 0.011 0.000 0.011 0.000 {getattr} + 1 0.000 0.000 0.000 0.000 {gevent.core.dns_init} + 30 0.009 0.000 0.009 0.000 {gevent.core.dns_resolve_ipv4} + 693 0.001 0.000 0.001 0.000 {gevent.core.set_exc_info} + 247 0.000 0.000 0.000 0.000 {globals} + 1759 0.002 0.000 0.002 0.000 {greenlet.getcurrent} + 6832 0.024 0.000 0.024 0.000 {hasattr} + 320 0.000 0.000 0.000 0.000 {hash} +14669/14668 0.045 0.000 0.047 0.000 {isinstance} + 2 0.000 0.000 0.000 0.000 {issubclass} + 1 0.000 0.000 0.000 0.000 {iter} +23634/23408 0.025 0.000 0.026 0.000 {len} + 4 0.000 0.000 0.000 0.000 {locals} + 2383 0.022 0.000 0.022 0.000 {map} + 1 0.000 0.000 0.000 0.000 {math.exp} + 2 0.000 0.000 0.000 0.000 {math.log} + 1 0.000 0.000 0.000 0.000 {math.sqrt} + 360 0.001 0.000 0.001 0.000 {max} + 21 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects} + 1359 0.008 0.000 0.010 0.000 {method 'add' of 'set' objects} + 296 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects} + 86128 0.102 0.000 0.102 0.000 {method 'append' of 'list' objects} + 367 0.001 0.000 0.001 0.000 {method 'cancel' of 'gevent.core.event' objects} + 1 0.000 0.000 0.000 0.000 {method 'clear' of 'collections.deque' objects} + 46 0.001 0.000 0.001 0.000 {method 'clear' of 'dict' objects} + 1 0.000 0.000 0.000 0.000 {method 'close' of 'file' objects} + 60 0.002 0.000 0.002 0.000 {method 'connect_ex' of '_socket.socket' objects} + 275 0.001 0.000 0.001 0.000 {method 'copy' of 'dict' objects} + 4 0.000 0.000 0.000 0.000 {method 'count' of 'list' objects} + 289 0.001 0.000 0.001 0.000 {method 'count' of 'str' objects} + 610 0.004 0.000 0.012 0.000 {method 'decode' of 'str' objects} + 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} + 661 0.001 0.000 0.001 0.000 {method 'discard' of 'set' objects} + 1281 0.006 0.000 0.007 0.000 {method 'encode' of 'str' objects} +2240/1280 0.010 0.000 0.048 0.000 {method 'encode' of 'unicode' objects} + 37 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects} + 358 0.001 0.000 0.001 0.000 {method 'extend' of 'list' objects} + 642 0.001 0.000 0.001 0.000 {method 'fileno' of '_socket.socket' objects} + 6668 0.011 0.000 0.011 0.000 {method 'find' of 'str' objects} + 1280 0.005 0.000 0.005 0.000 {method 'find' of 'unicode' objects} + 672 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects} + 13613 0.018 0.000 0.018 0.000 {method 'get' of 'dict' objects} + 60 0.000 0.000 0.000 0.000 {method 'getsockopt' of '_socket.socket' objects} + 2 0.000 0.000 0.000 0.000 {method 'getvalue' of 'cStringIO.StringO' objects} + 578 0.001 0.000 0.001 0.000 {method 'index' of 'str' objects} + 5 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects} + 124 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects} + 21 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects} + 3484 0.003 0.000 0.003 0.000 {method 'isspace' of 'str' objects} + 254 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects} + 3890 0.007 0.000 0.007 0.000 {method 'items' of 'dict' objects} + 320 0.000 0.000 0.000 0.000 {method 'iteritems' of 'dict' objects} +5134/4702 0.023 0.000 0.173 0.000 {method 'join' of 'str' objects} + 2992 0.004 0.000 0.004 0.000 {method 'keys' of 'dict' objects} + 18014 0.028 0.000 0.028 0.000 {method 'lower' of 'str' objects} + 320 0.001 0.000 0.001 0.000 {method 'lower' of 'unicode' objects} + 1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects} + 2280 0.003 0.000 0.003 0.000 {method 'pop' of 'dict' objects} + 320 0.001 0.000 0.001 0.000 {method 'pop' of 'list' objects} + 954 0.001 0.000 0.001 0.000 {method 'pop' of 'set' objects} + 293 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects} + 2352 0.003 0.000 0.003 0.000 {method 'read' of 'cStringIO.StringO' objects} + 3 0.010 0.003 0.010 0.003 {method 'read' of 'file' objects} + 74928 0.248 0.000 0.248 0.000 {method 'recv' of '_socket.socket' objects} + 90 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects} + 32 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects} + 6 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects} + 22 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects} + 592 0.002 0.000 0.002 0.000 {method 'rotate' of 'collections.deque' objects} + 641 0.001 0.000 0.001 0.000 {method 'rstrip' of 'str' objects} + 4999 0.010 0.000 0.010 0.000 {method 'seek' of 'cStringIO.StringO' objects} + 320 0.019 0.000 0.019 0.000 {method 'send' of '_socket.socket' objects} + 350 0.001 0.000 0.001 0.000 {method 'setblocking' of '_socket.socket' objects} + 1864 0.005 0.000 0.005 0.000 {method 'setdefault' of 'dict' objects} + 2 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects} + 2381 0.005 0.000 0.005 0.000 {method 'sort' of 'list' objects} + 1237 0.004 0.000 0.004 0.000 {method 'split' of 'str' objects} + 2657 0.006 0.000 0.006 0.000 {method 'startswith' of 'str' objects} + 4930 0.007 0.000 0.007 0.000 {method 'strip' of 'str' objects} + 372 0.014 0.000 0.019 0.000 {method 'switch' of 'greenlet.greenlet' objects} + 2647 0.005 0.000 0.005 0.000 {method 'tell' of 'cStringIO.StringO' objects} + 2 0.000 0.000 0.000 0.000 {method 'tolist' of 'array.array' objects} + 1 0.000 0.000 0.000 0.000 {method 'toordinal' of 'datetime.date' objects} + 2 0.000 0.000 0.000 0.000 {method 'tostring' of 'array.array' objects} + 5 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects} + 640 0.002 0.000 0.002 0.000 {method 'update' of 'dict' objects} + 2671 0.004 0.000 0.004 0.000 {method 'upper' of 'str' objects} + 4 0.000 0.000 0.000 0.000 {method 'write' of 'cStringIO.StringO' objects} + 1837 0.004 0.000 0.004 0.000 {min} + 320 0.002 0.000 0.010 0.000 {next} + 743 0.001 0.000 0.001 0.000 {ord} + 1 0.000 0.000 0.000 0.000 {posix.close} + 1 0.000 0.000 0.000 0.000 {posix.open} + 3 0.003 0.001 0.003 0.001 {posix.popen} + 1 0.000 0.000 0.000 0.000 {posix.read} + 652 0.012 0.000 0.012 0.000 {posix.stat} + 3 0.000 0.000 0.000 0.000 {posix.uname} + 664 0.002 0.000 0.002 0.000 {range} + 3 0.000 0.000 0.000 0.000 {repr} + 290 0.000 0.000 0.000 0.000 {select.poll} + 274 0.001 0.000 0.001 0.000 {setattr} + 4 0.000 0.000 0.000 0.000 {sys._getframe} + 1015 0.004 0.000 0.004 0.000 {sys.exc_clear} + 693 0.002 0.000 0.002 0.000 {sys.exc_info} + 1225 0.002 0.000 0.002 0.000 {thread.allocate_lock} + 1880 0.002 0.000 0.002 0.000 {thread.get_ident} + 931 0.002 0.000 0.002 0.000 {time.time} + 1 0.000 0.000 0.000 0.000 {zip} + + diff --git a/toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt b/toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt new file mode 100644 index 0000000..414c74d --- /dev/null +++ b/toys/brhute/grbrute_profiling/profile_pphidden_async_data_sorted.txt @@ -0,0 +1,1023 @@ + ncalls tottime percall cumtime percall filename:lineno(function) + 55 0.001 0.000 89.072 1.619 greenlet.py:475(_kill) + 55 0.011 0.000 89.067 1.619 greenlet.py:202(throw) + 7 0.006 0.001 3.174 0.453 greenlet.py:480(joinall) + 2/1 0.001 0.000 3.165 3.165 :1() + 2/1 0.003 0.002 3.163 3.163 pphidden_async.py:1() + 2/1 0.000 0.000 3.163 3.163 pool.py:76(join) + 2/1 0.000 0.000 3.163 3.163 grbrute.py:47(__init__) + 2/1 0.001 0.001 3.163 3.163 {execfile} + 320/1 0.018 0.000 3.158 3.158 greenlet.py:384(run) + 320/1 0.012 0.000 3.137 3.137 sessions.py:241(request) + 320/1 0.016 0.000 3.137 3.137 grequests.py:97(send) + 2352/1 0.327 0.000 3.136 3.136 socket.py:403(readline) + 74636/1 0.330 0.000 3.136 3.136 socket.py:324(recv) + 320/1 0.021 0.000 3.136 3.136 sessions.py:430(send) + 320/1 0.016 0.000 3.136 3.136 httplib.py:956(getresponse) + 320/1 0.027 0.000 3.136 3.136 httplib.py:384(begin) + 320/1 0.011 0.000 3.136 3.136 httplib.py:347(_read_status) + 320/1 0.019 0.000 3.136 3.136 connectionpool.py:325(urlopen) + 320/1 0.016 0.000 3.136 3.136 connectionpool.py:261(_make_request) + 320/1 0.016 0.000 3.136 3.136 adapters.py:188(send) + 290/1 0.010 0.000 3.135 3.135 hooks.py:29(dispatch_hook) + 290/1 0.010 0.000 3.133 3.133 grbrute.py:82(_cb_response) + 290/1 0.013 0.000 3.133 3.133 grbrute.py:33(_cb_response_session) + 290 0.012 0.000 0.966 0.003 mimetools.py:24(__init__) + 290 0.002 0.000 0.926 0.003 rfc822.py:88(__init__) + 290 0.065 0.000 0.924 0.003 httplib.py:230(readheaders) + 1 0.001 0.001 0.401 0.401 grbrute.py:1() + 1 0.001 0.001 0.371 0.371 __init__.py:42() + 320 0.012 0.000 0.364 0.001 models.py:214(prepare) + 1 0.004 0.004 0.363 0.363 utils.py:10() + 1 0.007 0.007 0.285 0.285 compat.py:5() + 585/537 0.004 0.000 0.250 0.000 models.py:526(generate) + 74928 0.248 0.000 0.248 0.000 {method 'recv' of '_socket.socket' objects} + 585/537 0.015 0.000 0.246 0.000 response.py:112(read) + 320/291 0.002 0.000 0.224 0.001 httplib.py:910(request) + 320/291 0.011 0.000 0.223 0.001 httplib.py:922(_send_request) + 2560 0.021 0.000 0.201 0.000 sessions.py:36(merge_kwargs) + 290 0.014 0.000 0.198 0.001 adapters.py:105(build_response) + 320/291 0.003 0.000 0.180 0.001 httplib.py:900(endheaders) +5134/4702 0.023 0.000 0.173 0.000 {method 'join' of 'str' objects} + 290/266 0.004 0.000 0.169 0.001 models.py:567(content) + 3 0.001 0.000 0.166 0.055 __init__.py:1() + 1 0.001 0.001 0.165 0.165 __init__.py:9() + 1 0.007 0.007 0.162 0.162 connectionpool.py:7() + 320 0.017 0.000 0.154 0.000 models.py:273(prepare_url) + 55 0.001 0.000 0.140 0.003 sre_compile.py:501(compile) + 57 0.002 0.000 0.136 0.002 re.py:229(_compile) + 1 0.000 0.000 0.133 0.133 request.py:7() + 1 0.005 0.005 0.133 0.133 filepost.py:7() + 54 0.000 0.000 0.125 0.002 re.py:188(compile) + 2210 0.021 0.000 0.122 0.000 urlparse.py:123(urlparse) + 1926 0.045 0.000 0.122 0.000 ordered_dict.py:29(__init__) + 320 0.007 0.000 0.121 0.000 models.py:423(prepare_cookies) + 1 0.001 0.001 0.120 0.120 uuid.py:45() + 2 0.000 0.000 0.112 0.056 util.py:206(find_library) + 2 0.001 0.000 0.112 0.056 util.py:182(_findSoname_ldconfig) + 1280 0.019 0.000 0.106 0.000 utils.py:95(from_key_val_list) + 2 0.000 0.000 0.102 0.051 re.py:139(search) + 86128 0.102 0.000 0.102 0.000 {method 'append' of 'list' objects} + 290 0.005 0.000 0.094 0.000 cookies.py:94(extract_cookies_to_jar) + 2 0.093 0.046 0.093 0.046 {built-in method search} + 2530 0.043 0.000 0.091 0.000 urlparse.py:154(urlsplit) + 320 0.005 0.000 0.091 0.000 cookies.py:108(get_cookie_header) + 64/63 0.012 0.000 0.087 0.001 sre_parse.py:669(parse) + 291 0.010 0.000 0.082 0.000 grbrute.py:65(_send) + 1926 0.047 0.000 0.075 0.000 ordered_dict.py:143(update) + 184/64 0.003 0.000 0.073 0.001 sre_parse.py:307(_parse_sub) + 223/67 0.021 0.000 0.072 0.001 sre_parse.py:385(_parse) + 1740 0.016 0.000 0.069 0.000 cookies.py:257(update) + 320 0.007 0.000 0.069 0.000 adapters.py:133(get_connection) + 55 0.001 0.000 0.067 0.001 sre_compile.py:486(_code) + 610 0.008 0.000 0.065 0.000 cookies.py:32(__init__) + 320 0.007 0.000 0.061 0.000 grbrute.py:27(add) + 1208 0.021 0.000 0.058 0.000 cookielib.py:1217(__init__) + 290 0.009 0.000 0.057 0.000 cookielib.py:1635(extract_cookies) + 320 0.007 0.000 0.056 0.000 utils.py:52(get_netrc_auth) + 290 0.004 0.000 0.056 0.000 utils.py:270(get_encoding_from_headers) + 275 0.009 0.000 0.055 0.000 sessions.py:82(resolve_redirects) + 888 0.015 0.000 0.055 0.000 cookies.py:374(cookiejar_from_dict) + 1 0.003 0.003 0.053 0.053 cookielib.py:26() + 1465 0.011 0.000 0.051 0.000 structures.py:60(__contains__) + 320 0.004 0.000 0.051 0.000 poolmanager.py:104(connection_from_url) + 320 0.012 0.000 0.051 0.000 cookielib.py:1312(add_cookie_header) + 320 0.011 0.000 0.050 0.000 utils.py:427(get_environ_proxies) + 320 0.004 0.000 0.050 0.000 grequests.py:112(send) + 422/55 0.016 0.000 0.048 0.001 sre_compile.py:38(_compile) +2240/1280 0.010 0.000 0.048 0.000 {method 'encode' of 'unicode' objects} +14669/14668 0.045 0.000 0.047 0.000 {isinstance} + 1 0.012 0.012 0.044 0.044 cgi.py:16() + 640 0.005 0.000 0.044 0.000 ordered_dict.py:221(copy) + 2060 0.007 0.000 0.044 0.000 cookielib.py:1180(deepvalues) + 320 0.002 0.000 0.042 0.000 cookies.py:309(copy) + 320 0.010 0.000 0.041 0.000 connectionpool.py:200(_get_conn) + 1920 0.018 0.000 0.039 0.000 utils.py:438() + 1755 0.020 0.000 0.039 0.000 structures.py:42(lower_keys) + 580 0.004 0.000 0.037 0.000 structures.py:68(get) + 320/291 0.004 0.000 0.037 0.000 httplib.py:772(_send_output) + 2060 0.015 0.000 0.037 0.000 cookielib.py:1175(vals_sorted_by_key) + 1 0.001 0.001 0.036 0.036 __init__.py:98() + 290 0.017 0.000 0.035 0.000 response.py:176(from_httplib) + 290 0.004 0.000 0.035 0.000 cookielib.py:1555(make_cookies) + 320 0.005 0.000 0.033 0.000 pool.py:196(spawn) + 320/291 0.006 0.000 0.033 0.000 httplib.py:735(send) + 585/537 0.005 0.000 0.033 0.000 httplib.py:513(read) + 1 0.001 0.001 0.031 0.031 decoder.py:2() + 1211 0.015 0.000 0.031 0.000 threading.py:96(RLock) + 580 0.003 0.000 0.031 0.000 rfc822.py:295(getheaders) + 1 0.000 0.000 0.029 0.029 platform.py:10() + 1 0.004 0.004 0.029 0.029 grequests.py:14() + 960 0.006 0.000 0.028 0.000 utils.py:56() + 179 0.003 0.000 0.028 0.000 sre_compile.py:184(_compile_charset) + 320 0.006 0.000 0.028 0.000 socket.py:382(sendall) + 580 0.018 0.000 0.028 0.000 rfc822.py:228(getallmatchingheaders) + 18014 0.028 0.000 0.028 0.000 {method 'lower' of 'str' objects} + 930 0.017 0.000 0.027 0.000 urlparse.py:146(_splitnetloc) + 320 0.003 0.000 0.026 0.000 poolmanager.py:81(connection_from_host) + 290 0.010 0.000 0.026 0.000 models.py:447(__init__) +23634/23408 0.025 0.000 0.026 0.000 {len} + 320 0.009 0.000 0.026 0.000 idna.py:147(encode) + 322 0.008 0.000 0.025 0.000 socket.py:128(_wait_helper) + 1 0.004 0.004 0.024 0.024 urllib.py:23() + 179 0.010 0.000 0.024 0.000 sre_compile.py:213(_optimize_charset) + 320 0.004 0.000 0.024 0.000 httplib.py:329(__init__) + 6832 0.024 0.000 0.024 0.000 {hasattr} + 2 0.000 0.000 0.023 0.011 scanner.py:18(__init__) + 2257 0.009 0.000 0.023 0.000 sre_parse.py:207(get) + 320 0.015 0.000 0.023 0.000 httplib.py:782(putrequest) + 320 0.002 0.000 0.022 0.000 utils.py:415(requote_uri) + 1742 0.016 0.000 0.022 0.000 rfc822.py:197(isheader) + 1600 0.022 0.000 0.022 0.000 ordered_dict.py:45(__setitem__) + 2383 0.022 0.000 0.022 0.000 {map} + 320 0.005 0.000 0.022 0.000 cookielib.py:1691(clear_expired_cookies) + 320 0.006 0.000 0.021 0.000 util.py:96(parse_url) + 4492 0.015 0.000 0.021 0.000 UserDict.py:57(get) + 320 0.002 0.000 0.021 0.000 socket.py:365(send) + 580 0.004 0.000 0.021 0.000 response.py:96(release_conn) + 652 0.010 0.000 0.021 0.000 genericpath.py:15(exists) + 320 0.002 0.000 0.021 0.000 _abcoll.py:334(get) + 320 0.003 0.000 0.020 0.000 socket.py:321(makefile) + 320 0.002 0.000 0.020 0.000 pool.py:189(start) + 320 0.005 0.000 0.020 0.000 models.py:58(_encode_params) + 320 0.006 0.000 0.020 0.000 models.py:332(prepare_body) + 320 0.010 0.000 0.020 0.000 models.py:323(prepare_headers) + 320 0.004 0.000 0.020 0.000 adapters.py:154(request_url) + 55 0.002 0.000 0.019 0.000 sre_compile.py:367(_compile_info) + 295/271 0.011 0.000 0.019 0.000 socket.py:333(read) + 640 0.012 0.000 0.019 0.000 posixpath.py:248(expanduser) + 320 0.005 0.000 0.019 0.000 models.py:401(prepare_auth) + 372 0.014 0.000 0.019 0.000 {method 'switch' of 'greenlet.greenlet' objects} + 320 0.019 0.000 0.019 0.000 {method 'send' of '_socket.socket' objects} + 320 0.005 0.000 0.019 0.000 _collections.py:45(__getitem__) + 290 0.009 0.000 0.019 0.000 cgi.py:304(parse_header) + 939 0.012 0.000 0.018 0.000 threading.py:116(acquire) + 13613 0.018 0.000 0.018 0.000 {method 'get' of 'dict' objects} + 320 0.007 0.000 0.018 0.000 greenlet.py:459(_notify_links) + 1 0.001 0.001 0.017 0.017 Cookie.py:206() + 2 0.000 0.000 0.017 0.008 __init__.py:71(search_function) + 11 0.002 0.000 0.017 0.002 {__import__} + 290 0.002 0.000 0.017 0.000 connectionpool.py:233(_put_conn) + 1 0.000 0.000 0.016 0.016 monkey.py:95(patch_all) + 1 0.001 0.001 0.016 0.016 monkey.py:44(patch_socket) + 1 0.001 0.001 0.016 0.016 idna.py:3() + 1211 0.011 0.000 0.016 0.000 threading.py:101(__init__) + 2619 0.012 0.000 0.016 0.000 sre_parse.py:188(__next) + 320 0.007 0.000 0.016 0.000 Queue.py:107(put) + 320 0.003 0.000 0.016 0.000 models.py:436(prepare_hooks) + 1 0.005 0.005 0.015 0.015 socket.py:32() + 320 0.005 0.000 0.015 0.000 Queue.py:150(get) + 640 0.005 0.000 0.014 0.000 utils.py:584(get_auth_from_url) + 3312 0.011 0.000 0.014 0.000 structures.py:45() + 1740 0.010 0.000 0.014 0.000 rfc822.py:285(getheader) + 320 0.003 0.000 0.014 0.000 pool.py:43(add) + 290 0.007 0.000 0.014 0.000 mimetools.py:33(parsetype) + 933 0.007 0.000 0.014 0.000 greenlet.py:400(rawlink) + 30/1 0.002 0.000 0.013 0.013 socket.py:603(getaddrinfo) + 320 0.005 0.000 0.013 0.000 urllib.py:1193(quote) + 939 0.009 0.000 0.013 0.000 threading.py:136(release) + 2210 0.008 0.000 0.013 0.000 :8(__new__) + 320 0.006 0.000 0.013 0.000 socket.py:315(dup) + 2 0.007 0.003 0.012 0.006 sre_compile.py:307(_optimize_unicode) + 290 0.004 0.000 0.012 0.000 util.py:235(is_connection_dropped) + 652 0.012 0.000 0.012 0.000 {posix.stat} + 610 0.004 0.000 0.012 0.000 {method 'decode' of 'str' objects} + 320 0.001 0.000 0.012 0.000 greenlet.py:455(link_exception) + 641 0.005 0.000 0.011 0.000 threading.py:272(notify) + 1866 0.007 0.000 0.011 0.000 sre_parse.py:136(__getitem__) + 320 0.004 0.000 0.011 0.000 models.py:136(register_hook) + 6668 0.011 0.000 0.011 0.000 {method 'find' of 'str' objects} + 1280 0.007 0.000 0.011 0.000 httplib.py:889(putheader) + 320 0.004 0.000 0.011 0.000 greenlet.py:411(link) + 3602 0.011 0.000 0.011 0.000 {getattr} + 320 0.004 0.000 0.011 0.000 adapters.py:169(add_headers) + 3 0.010 0.003 0.010 0.003 {method 'read' of 'file' objects} + 290 0.010 0.000 0.010 0.000 pphidden_async.py:29(cb_response) + 320 0.004 0.000 0.010 0.000 ordered_dict.py:178(pop) + 320 0.002 0.000 0.010 0.000 {next} + 290 0.003 0.000 0.010 0.000 models.py:515(iter_content) + 1280 0.006 0.000 0.010 0.000 models.py:327() + 4999 0.010 0.000 0.010 0.000 {method 'seek' of 'cStringIO.StringO' objects} + 1359 0.008 0.000 0.010 0.000 {method 'add' of 'set' objects} + 320 0.002 0.000 0.010 0.000 __init__.py:1244(isEnabledFor) + 580 0.005 0.000 0.010 0.000 httplib.py:497(close) + 1742 0.008 0.000 0.010 0.000 httplib.py:216(addheader) + 1 0.004 0.004 0.009 0.009 mimetools.py:1() + 1 0.006 0.006 0.009 0.009 __init__.py:5() + 320 0.008 0.000 0.009 0.000 util.py:63(split_first) + 320 0.009 0.000 0.009 0.000 pphidden_async.py:19(next) + 1280 0.006 0.000 0.009 0.000 ordered_dict.py:125(items) + 290 0.007 0.000 0.009 0.000 mimetools.py:50(parseplist) + 290 0.001 0.000 0.009 0.000 __init__.py:1034(debug) + 960 0.005 0.000 0.009 0.000 idna.py:62(ToASCII) + 320 0.008 0.000 0.009 0.000 greenlet.py:146(__init__) + 30 0.009 0.000 0.009 0.000 {gevent.core.dns_resolve_ipv4} + 869 0.006 0.000 0.009 0.000 cgi.py:292(_parseparam) + 3478 0.009 0.000 0.009 0.000 {built-in method __new__ of type object at 0x82f680} + 1 0.002 0.002 0.008 0.008 urlparse.py:26() + 1 0.004 0.004 0.008 0.008 socket.py:44() + 610 0.003 0.000 0.008 0.000 utf_8.py:15(decode) + 5132 0.008 0.000 0.008 0.000 UserDict.py:69(__contains__) + 290 0.003 0.000 0.008 0.000 structures.py:63(__getitem__) + 596/230 0.007 0.000 0.008 0.000 sre_parse.py:146(getwidth) + 350 0.004 0.000 0.008 0.000 socket.py:201(__init__) + 290 0.006 0.000 0.008 0.000 response.py:60(__init__) + 4480 0.008 0.000 0.008 0.000 ordered_dict.py:64(__iter__) + 320 0.004 0.000 0.008 0.000 models.py:37(path_url) + 320 0.008 0.000 0.008 0.000 __init__.py:1230(getEffectiveLevel) + 2060 0.008 0.000 0.008 0.000 cookielib.py:1710(__iter__) + 1 0.002 0.002 0.007 0.007 util.py:8() + 1 0.001 0.001 0.007 0.007 urllib2.py:76() + 1 0.000 0.000 0.007 0.007 decoder.py:244(JSONDecoder) + 290 0.002 0.000 0.007 0.000 utils.py:381(stream_untransfer) + 320 0.005 0.000 0.007 0.000 urllib.py:1234(urlencode) + 847 0.007 0.000 0.007 0.000 sre_parse.py:132(__len__) + 293 0.002 0.000 0.007 0.000 queue.py:147(get) + 640 0.005 0.000 0.007 0.000 ordered_dict.py:117(keys) + 320 0.006 0.000 0.007 0.000 models.py:179(__init__) + 4930 0.007 0.000 0.007 0.000 {method 'strip' of 'str' objects} + 3890 0.007 0.000 0.007 0.000 {method 'items' of 'dict' objects} + 1281 0.006 0.000 0.007 0.000 {method 'encode' of 'str' objects} + 290 0.002 0.000 0.007 0.000 httplib.py:467(_check_close) + 1208 0.007 0.000 0.007 0.000 cookielib.py:848(__init__) + 1 0.004 0.004 0.006 0.006 __init__.py:4() + 1 0.003 0.003 0.006 0.006 argparse.py:76() + 5 0.000 0.000 0.006 0.001 scanner.py:65(decorator) + 320 0.003 0.000 0.006 0.000 utils.py:397(unquote_unreserved) + 320 0.004 0.000 0.006 0.000 utils.py:118(to_key_val_list) + 320 0.002 0.000 0.006 0.000 sessions.py:59(get_original_key) + 317 0.005 0.000 0.006 0.000 ordered_dict.py:55(__delitem__) + 2657 0.006 0.000 0.006 0.000 {method 'startswith' of 'str' objects} + 30 0.001 0.000 0.006 0.000 hub.py:282(switch_args) + 1600 0.005 0.000 0.006 0.000 httplib.py:765(_output) + 290 0.004 0.000 0.006 0.000 httplib.py:631(getheaders) + 320 0.006 0.000 0.006 0.000 greenlet.py:361(_report_result) + 610 0.006 0.000 0.006 0.000 {built-in method utcnow} + 2222 0.006 0.000 0.006 0.000 {built-in method acquire} + 1 0.003 0.003 0.005 0.005 tempfile.py:18() + 1 0.000 0.000 0.005 0.005 platform.py:1007(_syscmd_uname) + 1 0.003 0.003 0.005 0.005 io.py:35() + 1 0.003 0.003 0.005 0.005 __init__.py:24() + 1 0.000 0.000 0.005 0.005 argparse.py:1556(__init__) + 3 0.004 0.001 0.005 0.002 collections.py:13(namedtuple) + 4 0.000 0.000 0.005 0.001 platform.py:1288(system) + 7 0.000 0.000 0.005 0.001 platform.py:1151(uname) + 320 0.002 0.000 0.005 0.000 utils.py:43(super_len) + 320 0.003 0.000 0.005 0.000 util.py:44(__new__) + 2519 0.005 0.000 0.005 0.000 threading.py:64(_note) + 641 0.003 0.000 0.005 0.000 threading.py:221(_is_owned) + 610 0.004 0.000 0.005 0.000 socket.py:267(close) + 320 0.002 0.000 0.005 0.000 pool.py:201(discard) + 595 0.003 0.000 0.005 0.000 models.py:252(__init__) + 2647 0.005 0.000 0.005 0.000 {method 'tell' of 'cStringIO.StringO' objects} + 2381 0.005 0.000 0.005 0.000 {method 'sort' of 'list' objects} + 1864 0.005 0.000 0.005 0.000 {method 'setdefault' of 'dict' objects} + 1280 0.005 0.000 0.005 0.000 {method 'find' of 'unicode' objects} + 320 0.005 0.000 0.005 0.000 {built-in method split} + 290 0.003 0.000 0.005 0.000 {built-in method register} + 1 0.000 0.000 0.004 0.004 urllib2.py:803(AbstractBasicAuthHandler) + 1 0.004 0.004 0.004 0.004 socket.py:176(_socketobject) + 1 0.000 0.000 0.004 0.004 encoder.py:2() + 2 0.000 0.000 0.004 0.002 warnings.py:45(filterwarnings) + 1015 0.004 0.000 0.004 0.000 {sys.exc_clear} + 612 0.003 0.000 0.004 0.000 :1(fileno) + 1255 0.002 0.000 0.004 0.000 sre_parse.py:201(match) + 320 0.003 0.000 0.004 0.000 socket.py:237(__init__) + 320 0.002 0.000 0.004 0.000 sessions.py:485(get_adapter) + 293 0.002 0.000 0.004 0.000 queue.py:95(put) + 1837 0.004 0.000 0.004 0.000 {min} + 2671 0.004 0.000 0.004 0.000 {method 'upper' of 'str' objects} + 1237 0.004 0.000 0.004 0.000 {method 'split' of 'str' objects} + 2992 0.004 0.000 0.004 0.000 {method 'keys' of 'dict' objects} + 105 0.002 0.000 0.004 0.000 hub.py:270(switch) + 320 0.003 0.000 0.004 0.000 grequests.py:78(__init__) + 2967 0.004 0.000 0.004 0.000 {cStringIO.StringIO} + 320 0.002 0.000 0.004 0.000 cookielib.py:1253(_cookie_attrs) + 610 0.004 0.000 0.004 0.000 {_codecs.utf_8_decode} + 1 0.002 0.002 0.003 0.003 response.py:7() + 1 0.001 0.001 0.003 0.003 models.py:8() + 1 0.001 0.001 0.003 0.003 greenlet.py:3() + 1 0.000 0.000 0.003 0.003 api.py:12() + 3 0.003 0.001 0.003 0.001 {posix.popen} + 320 0.001 0.000 0.003 0.000 urlparse.py:198(urlunparse) + 1224 0.003 0.000 0.003 0.000 threading.py:59(__init__) + 860 0.002 0.000 0.003 0.000 sre_parse.py:144(append) + 17 0.003 0.000 0.003 0.000 sre_compile.py:264(_mk_bitmap) + 2032 0.003 0.000 0.003 0.000 rfc822.py:219(iscomment) + 2032 0.003 0.000 0.003 0.000 rfc822.py:209(islast) + 334 0.002 0.000 0.003 0.000 queue.py:80(qsize) + 640 0.002 0.000 0.003 0.000 Queue.py:237(_qsize) + 20 0.001 0.000 0.003 0.000 queue.py:193(_unlock) + 320 0.002 0.000 0.003 0.000 pool.py:47(discard) + 320 0.002 0.000 0.003 0.000 models.py:389(prepare_content_length) + 2352 0.003 0.000 0.003 0.000 {method 'read' of 'cStringIO.StringO' objects} + 2280 0.003 0.000 0.003 0.000 {method 'pop' of 'dict' objects} + 3484 0.003 0.000 0.003 0.000 {method 'isspace' of 'str' objects} + 672 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects} + 7 0.002 0.000 0.003 0.000 __init__.py:959(_fixupParents) + 7 0.000 0.000 0.003 0.000 __init__.py:927(getLogger) + 7 0.000 0.000 0.003 0.000 __init__.py:1420(getLogger) + 1064 0.003 0.000 0.003 0.000 hub.py:115(get_hub) + 320 0.003 0.000 0.003 0.000 greenlet.py:236(start) + 30 0.001 0.000 0.003 0.000 connectionpool.py:189(_new_conn) + 320 0.002 0.000 0.003 0.000 adapters.py:77(cert_verify) + 16 0.001 0.000 0.003 0.000 abc.py:83(__new__) + 1 0.001 0.001 0.002 0.002 threading.py:1() + 1 0.001 0.001 0.002 0.002 ssl.py:56() + 1 0.001 0.001 0.002 0.002 six.py:1() + 1 0.001 0.001 0.002 0.002 sessions.py:10() + 1 0.000 0.000 0.002 0.002 re.py:134(match) + 1 0.001 0.001 0.002 0.002 Queue.py:1() + 1 0.000 0.000 0.002 0.002 poolmanager.py:7() + 1 0.002 0.002 0.002 0.002 mimetypes.py:324(_default_mime_types) + 1 0.000 0.000 0.002 0.002 mimetypes.py:23() + 1 0.002 0.002 0.002 0.002 httplib.py:67() + 1 0.000 0.000 0.002 0.002 cookielib.py:1201(CookieJar) + 1 0.002 0.002 0.002 0.002 calendar.py:6() + 1 0.000 0.000 0.002 0.002 argparse.py:2021(_match_arguments_partial) + 1 0.000 0.000 0.002 0.002 argparse.py:1880(consume_positionals) + 1 0.000 0.000 0.002 0.002 argparse.py:1735(_parse_known_args) + 1 0.000 0.000 0.002 0.002 argparse.py:1704(parse_known_args) + 1 0.000 0.000 0.002 0.002 argparse.py:1697(parse_args) + 3 0.000 0.000 0.002 0.001 sessions.py:188(__init__) + 3 0.000 0.000 0.002 0.001 poolmanager.py:61(_new_pool) + 3 0.000 0.000 0.002 0.001 grbrute.py:21(__init__) + 3 0.000 0.000 0.002 0.001 gettext.py:565(gettext) + 3 0.001 0.000 0.002 0.001 gettext.py:527(dgettext) + 3 0.000 0.000 0.002 0.001 gettext.py:461(translation) + 3 0.000 0.000 0.002 0.001 gettext.py:421(find) + 3 0.000 0.000 0.002 0.001 connectionpool.py:171(__init__) + 3 0.000 0.000 0.002 0.001 argparse.py:1190(__init__) + 46 0.000 0.000 0.002 0.000 urlparse.py:59(clear_cache) + 485 0.002 0.000 0.002 0.000 urlparse.py:303() + 320 0.002 0.000 0.002 0.000 urlparse.py:208(urlunsplit) + 485 0.002 0.000 0.002 0.000 urllib.py:1168() + 931 0.002 0.000 0.002 0.000 {time.time} + 1880 0.002 0.000 0.002 0.000 {thread.get_ident} + 1225 0.002 0.000 0.002 0.000 {thread.allocate_lock} + 693 0.002 0.000 0.002 0.000 {sys.exc_info} + 441 0.002 0.000 0.002 0.000 sre_parse.py:96(__init__) + 175 0.001 0.000 0.002 0.000 sre_compile.py:360(_simple) + 320 0.001 0.000 0.002 0.000 socket.py:276(__del__) + 290 0.001 0.000 0.002 0.000 rfc822.py:454(items) + 664 0.002 0.000 0.002 0.000 {range} + 320 0.001 0.000 0.002 0.000 Queue.py:243(_get) + 320 0.001 0.000 0.002 0.000 Queue.py:240(_put) + 320 0.001 0.000 0.002 0.000 models.py:267(prepare_method) + 640 0.002 0.000 0.002 0.000 {method 'update' of 'dict' objects} + 592 0.002 0.000 0.002 0.000 {method 'rotate' of 'collections.deque' objects} + 60 0.002 0.000 0.002 0.000 {method 'connect_ex' of '_socket.socket' objects} + 30 0.000 0.000 0.002 0.000 __init__.py:1046(info) + 918 0.002 0.000 0.002 0.000 hooks.py:20(default_hooks) + 320 0.001 0.000 0.002 0.000 greenlet.py:66(__call__) + 320 0.001 0.000 0.002 0.000 greenlet.py:30(__hash__) + 933 0.002 0.000 0.002 0.000 greenlet.py:160(ready) + 1759 0.002 0.000 0.002 0.000 {greenlet.getcurrent} + 320 0.002 0.000 0.002 0.000 cookielib.py:1246(_cookies_for_request) + 1768 0.002 0.000 0.002 0.000 {chr} + 1581 0.002 0.000 0.002 0.000 {built-in method release} + 290 0.002 0.000 0.002 0.000 {built-in method poll} + 320 0.002 0.000 0.002 0.000 abc.py:125(__instancecheck__) + 1 0.001 0.001 0.001 0.001 status_codes.py:3() + 1 0.001 0.001 0.001 0.001 ssl.py:58(SSLSocket) + 1 0.000 0.000 0.001 0.001 ssl.py:13() + 1 0.001 0.001 0.001 0.001 socket.py:199(socket) + 1 0.001 0.001 0.001 0.001 random.py:40() + 1 0.001 0.001 0.001 0.001 queue.py:16() + 1 0.000 0.000 0.001 0.001 pool.py:88(kill) + 1 0.000 0.000 0.001 0.001 pool.py:208(kill) + 1 0.001 0.001 0.001 0.001 netrc.py:1() + 1 0.000 0.000 0.001 0.001 hub.py:3() + 1 0.001 0.001 0.001 0.001 heapq.py:31() + 1 0.001 0.001 0.001 0.001 hashlib.py:55() + 1 0.001 0.001 0.001 0.001 exceptions.py:9() + 1 0.001 0.001 0.001 0.001 exceptions.py:10() + 1 0.000 0.000 0.001 0.001 cookies.py:7() + 1 0.000 0.000 0.001 0.001 _collections.py:7() + 1 0.001 0.001 0.001 0.001 collections.py:1() + 1 0.001 0.001 0.001 0.001 base64.py:3() + 1 0.000 0.000 0.001 0.001 auth.py:8() + 643 0.001 0.000 0.001 0.000 UserDict.py:17(__getitem__) + 320 0.001 0.000 0.001 0.000 urlparse.py:77(password) + 320 0.001 0.000 0.001 0.000 urlparse.py:67(username) + 30 0.000 0.000 0.001 0.000 timeout.py:100(start_new) + 147 0.001 0.000 0.001 0.000 sre_parse.py:263(_escape) + 130 0.001 0.000 0.001 0.000 sre_parse.py:231(_class_escape) + 64 0.000 0.000 0.001 0.000 sre_parse.py:184(__init__) + 108 0.001 0.000 0.001 0.000 sre_compile.py:480(isstring) + 350 0.001 0.000 0.001 0.000 socket.py:422(settimeout) + 320 0.001 0.000 0.001 0.000 socket.py:283(flush) + 274 0.001 0.000 0.001 0.000 {setattr} + 293 0.001 0.000 0.001 0.000 queue.py:59(_put) + 293 0.001 0.000 0.001 0.000 queue.py:56(_get) + 293 0.001 0.000 0.001 0.000 queue.py:229(_schedule_unlock) + 6 0.000 0.000 0.001 0.000 poolmanager.py:55(__init__) + 743 0.001 0.000 0.001 0.000 {ord} + 350 0.001 0.000 0.001 0.000 {method 'setblocking' of '_socket.socket' objects} + 641 0.001 0.000 0.001 0.000 {method 'rstrip' of 'str' objects} + 954 0.001 0.000 0.001 0.000 {method 'pop' of 'set' objects} + 320 0.001 0.000 0.001 0.000 {method 'pop' of 'list' objects} + 320 0.001 0.000 0.001 0.000 {method 'lower' of 'unicode' objects} + 578 0.001 0.000 0.001 0.000 {method 'index' of 'str' objects} + 642 0.001 0.000 0.001 0.000 {method 'fileno' of '_socket.socket' objects} + 358 0.001 0.000 0.001 0.000 {method 'extend' of 'list' objects} + 661 0.001 0.000 0.001 0.000 {method 'discard' of 'set' objects} + 289 0.001 0.000 0.001 0.000 {method 'count' of 'str' objects} + 275 0.001 0.000 0.001 0.000 {method 'copy' of 'dict' objects} + 46 0.001 0.000 0.001 0.000 {method 'clear' of 'dict' objects} + 367 0.001 0.000 0.001 0.000 {method 'cancel' of 'gevent.core.event' objects} + 360 0.001 0.000 0.001 0.000 {max} + 3 0.000 0.000 0.001 0.000 __init__.py:337(__init__) + 51/21 0.002 0.000 0.001 0.000 hub.py:296(get) + 875 0.001 0.000 0.001 0.000 httplib.py:502(isclosed) + 320 0.001 0.000 0.001 0.000 greenlet.py:23(__init__) + 320 0.001 0.000 0.001 0.000 greenlet.py:164(successful) + 693 0.001 0.000 0.001 0.000 {gevent.core.set_exc_info} + 6 0.000 0.000 0.001 0.000 gettext.py:130(_expand_lang) + 580 0.001 0.000 0.001 0.000 cookies.py:87(info) + 290 0.001 0.000 0.001 0.000 cookies.py:80(__init__) + 257 0.001 0.000 0.001 0.000 Cookie.py:308() + 610 0.001 0.000 0.001 0.000 cookielib.py:43(_debug) + 1253 0.001 0.000 0.001 0.000 {callable} + 320 0.001 0.000 0.001 0.000 {built-in method fromkeys} + 323 0.001 0.000 0.001 0.000 {built-in method __enter__} + 5 0.000 0.000 0.001 0.000 argparse.py:1271(add_argument) + 322 0.000 0.000 0.001 0.000 {any} + 341 0.001 0.000 0.001 0.000 {all} + 6 0.000 0.000 0.001 0.000 adapters.py:70(init_poolmanager) + 6 0.000 0.000 0.001 0.000 adapters.py:49(__init__) + 16 0.000 0.000 0.001 0.000 abc.py:86() + 1 0.000 0.000 0.000 0.000 {zip} + 3 0.000 0.000 0.000 0.000 warnings.py:361(__exit__) + 3 0.000 0.000 0.000 0.000 warnings.py:345(__enter__) + 3 0.000 0.000 0.000 0.000 warnings.py:324(__init__) + 2 0.000 0.000 0.000 0.000 warnings.py:14(warnpy3k) + 1 0.000 0.000 0.000 0.000 uuid.py:53(UUID) + 4 0.000 0.000 0.000 0.000 uuid.py:101(__init__) + 3 0.000 0.000 0.000 0.000 utils.py:493(default_headers) + 3 0.000 0.000 0.000 0.000 utils.py:462(default_user_agent) + 1 0.000 0.000 0.000 0.000 util.py:53(__init__) + 1 0.000 0.000 0.000 0.000 util.py:50(lazy_property) + 1 0.000 0.000 0.000 0.000 util.py:4(wrap_errors) + 1 0.000 0.000 0.000 0.000 util.py:4() + 1 0.000 0.000 0.000 0.000 util.py:37(Url) + 1 0.000 0.000 0.000 0.000 util.py:2() + 1 0.000 0.000 0.000 0.000 urlparse.py:64(ResultMixin) + 1 0.000 0.000 0.000 0.000 urlparse.py:115(ParseResult) + 1 0.000 0.000 0.000 0.000 urlparse.py:107(SplitResult) + 1 0.000 0.000 0.000 0.000 urllib.py:977(addinfourl) + 1 0.000 0.000 0.000 0.000 urllib.py:967(addinfo) + 1 0.000 0.000 0.000 0.000 urllib.py:952(addclosehook) + 1 0.000 0.000 0.000 0.000 urllib.py:923(addbase) + 1 0.000 0.000 0.000 0.000 urllib.py:845(ftpwrapper) + 1 0.000 0.000 0.000 0.000 urllib.py:615(FancyURLopener) + 1 0.000 0.000 0.000 0.000 urllib.py:115(URLopener) + 1 0.000 0.000 0.000 0.000 urllib.py:109(ContentTooShortError) + 1 0.000 0.000 0.000 0.000 urllib2.py:895(AbstractDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:867(ProxyBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:857(HTTPBasicAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:793(HTTPPasswordMgrWithDefaultRealm) + 1 0.000 0.000 0.000 0.000 urllib2.py:729(HTTPPasswordMgr) + 1 0.000 0.000 0.000 0.000 urllib2.py:686(ProxyHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:520(HTTPRedirectHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:516(HTTPDefaultErrorHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:499(HTTPErrorProcessor) + 1 0.000 0.000 0.000 0.000 urllib2.py:480(BaseHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:297(OpenerDirector) + 1 0.000 0.000 0.000 0.000 urllib2.py:187(Request) + 1 0.000 0.000 0.000 0.000 urllib2.py:149(HTTPError) + 1 0.000 0.000 0.000 0.000 urllib2.py:136(URLError) + 1 0.000 0.000 0.000 0.000 urllib2.py:1369(CacheFTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1310(FTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1258(FileHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1200(UnknownHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1182(HTTPCookieProcessor) + 1 0.000 0.000 0.000 0.000 urllib2.py:1175(HTTPSHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1167(HTTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1065(AbstractHTTPHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1053(ProxyDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 urllib2.py:1035(HTTPDigestAuthHandler) + 1 0.000 0.000 0.000 0.000 traceback.py:1() + 30 0.000 0.000 0.000 0.000 timeout.py:90(start) + 30 0.000 0.000 0.000 0.000 timeout.py:85(__init__) + 1 0.000 0.000 0.000 0.000 timeout.py:32(Timeout) + 1 0.000 0.000 0.000 0.000 timeout.py:14() + 30 0.000 0.000 0.000 0.000 timeout.py:128(cancel) + 30 0.000 0.000 0.000 0.000 timeout.py:120(pending) + 1 0.000 0.000 0.000 0.000 threading.py:99(_RLock) + 1 0.000 0.000 0.000 0.000 threading.py:783(_DummyThread) + 1 0.000 0.000 0.000 0.000 threading.py:752(_set_daemon) + 1 0.000 0.000 0.000 0.000 threading.py:744(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:742(_MainThread) + 1 0.000 0.000 0.000 0.000 threading.py:713(_Timer) + 1 0.000 0.000 0.000 0.000 threading.py:57(_Verbose) + 1 0.000 0.000 0.000 0.000 threading.py:510(_set_ident) + 1 0.000 0.000 0.000 0.000 threading.py:426(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:414(Thread) + 1 0.000 0.000 0.000 0.000 threading.py:376(set) + 1 0.000 0.000 0.000 0.000 threading.py:366(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:362(_Event) + 1 0.000 0.000 0.000 0.000 threading.py:359(Event) + 1 0.000 0.000 0.000 0.000 threading.py:347(_BoundedSemaphore) + 1 0.000 0.000 0.000 0.000 threading.py:299(_Semaphore) + 1 0.000 0.000 0.000 0.000 threading.py:290(notifyAll) + 11 0.000 0.000 0.000 0.000 threading.py:181(__init__) + 1 0.000 0.000 0.000 0.000 threading.py:179(_Condition) + 11 0.000 0.000 0.000 0.000 threading.py:176(Condition) + 1 0.000 0.000 0.000 0.000 tempfile.py:483(SpooledTemporaryFile) + 1 0.000 0.000 0.000 0.000 tempfile.py:357(_TemporaryFileWrapper) + 1 0.000 0.000 0.000 0.000 tempfile.py:107(_RandomNameSequence) + 4 0.000 0.000 0.000 0.000 {sys._getframe} + 1 0.000 0.000 0.000 0.000 structures.py:9() + 1 0.000 0.000 0.000 0.000 structures.py:78(__init__) + 1 0.000 0.000 0.000 0.000 structures.py:75(LookupDict) + 1 0.000 0.000 0.000 0.000 structures.py:36(CaseInsensitiveDict) + 1 0.000 0.000 0.000 0.000 structures.py:15(IteratorProxy) + 20 0.000 0.000 0.000 0.000 {_struct.calcsize} + 20 0.000 0.000 0.000 0.000 string.py:364(rfind) + 1 0.000 0.000 0.000 0.000 string.py:281(split) + 1 0.000 0.000 0.000 0.000 string.py:248(strip) + 1 0.000 0.000 0.000 0.000 string.py:220(lower) + 1 0.000 0.000 0.000 0.000 stringprep.py:6() + 1 0.000 0.000 0.000 0.000 StringIO.py:42(StringIO) + 1 0.000 0.000 0.000 0.000 StringIO.py:30() + 1 0.000 0.000 0.000 0.000 :1(Url) + 1 0.000 0.000 0.000 0.000 :1(SplitResult) + 1 0.000 0.000 0.000 0.000 :1(ParseResult) + 1 0.000 0.000 0.000 0.000 ssl.py:83(SSLSocket) + 1 0.000 0.000 0.000 0.000 sre_parse.py:91(checkgroup) + 90 0.000 0.000 0.000 0.000 sre_parse.py:89(closegroup) + 90 0.000 0.000 0.000 0.000 sre_parse.py:78(opengroup) + 66 0.000 0.000 0.000 0.000 sre_parse.py:73(__init__) + 4 0.000 0.000 0.000 0.000 sre_parse.py:222(isname) + 12 0.000 0.000 0.000 0.000 sre_parse.py:216(isident) + 3 0.000 0.000 0.000 0.000 sre_parse.py:213(seek) + 11 0.000 0.000 0.000 0.000 sre_parse.py:211(tell) + 185 0.000 0.000 0.000 0.000 sre_parse.py:140(__setitem__) + 4 0.000 0.000 0.000 0.000 sre_parse.py:134(__delitem__) + 161 0.000 0.000 0.000 0.000 {_sre.getlower} + 20 0.000 0.000 0.000 0.000 sre_compile.py:57(fixup) + 318 0.000 0.000 0.000 0.000 sre_compile.py:24(_identityfunction) + 55 0.000 0.000 0.000 0.000 {_sre.compile} + 30 0.000 0.000 0.000 0.000 socket.py:579(gethostbyname) + 30/1 0.001 0.000 0.000 0.000 socket.py:534(create_connection) + 30/1 0.087 0.003 0.000 0.000 socket.py:269(connect) + 1 0.000 0.000 0.000 0.000 socket.py:226(_fileobject) + 1 0.000 0.000 0.000 0.000 socket.py:186(_closedsocket) + 1 0.000 0.000 0.000 0.000 socket.py:164(_closedsocket) + 30/1 0.000 0.000 0.000 0.000 socket.py:154(wait_readwrite) + 322/1 0.004 0.000 0.000 0.000 socket.py:136(wait_read) + 30 0.000 0.000 0.000 0.000 {_socket.inet_ntop} + 350 0.000 0.000 0.000 0.000 {_socket.getdefaulttimeout} + 31 0.000 0.000 0.000 0.000 six.py:93(__init__) + 1 0.000 0.000 0.000 0.000 six.py:91(MovedModule) + 1 0.000 0.000 0.000 0.000 six.py:83(__get__) + 40 0.000 0.000 0.000 0.000 six.py:80(__init__) + 1 0.000 0.000 0.000 0.000 six.py:78(_LazyDescr) + 1 0.000 0.000 0.000 0.000 six.py:72(_import_module) + 4 0.000 0.000 0.000 0.000 six.py:67(_add_doc) + 1 0.000 0.000 0.000 0.000 six.py:54(__len__) + 1 0.000 0.000 0.000 0.000 six.py:53(X) + 1 0.000 0.000 0.000 0.000 six.py:317(exec_) + 1 0.000 0.000 0.000 0.000 six.py:247(Iterator) + 1 0.000 0.000 0.000 0.000 six.py:132(_MovedItems) + 1 0.000 0.000 0.000 0.000 six.py:126(_resolve) + 9 0.000 0.000 0.000 0.000 six.py:108(__init__) + 1 0.000 0.000 0.000 0.000 six.py:106(MovedAttribute) + 1 0.000 0.000 0.000 0.000 shlex.py:2() + 1 0.000 0.000 0.000 0.000 shlex.py:21(shlex) + 1 0.000 0.000 0.000 0.000 sessions.py:81(SessionRedirectMixin) + 6 0.000 0.000 0.000 0.000 sessions.py:500(mount) + 1 0.000 0.000 0.000 0.000 sessions.py:170(Session) + 290 0.000 0.000 0.000 0.000 {select.poll} + 5 0.000 0.000 0.000 0.000 scanner.py:64(pattern) + 1 0.000 0.000 0.000 0.000 scanner.py:3() + 1 0.000 0.000 0.000 0.000 scanner.py:17(Scanner) + 1 0.000 0.000 0.000 0.000 rfc822.py:85(Message) + 1 0.000 0.000 0.000 0.000 rfc822.py:770(AddressList) + 1 0.000 0.000 0.000 0.000 rfc822.py:71() + 1 0.000 0.000 0.000 0.000 rfc822.py:496(AddrlistClass) + 1 0.000 0.000 0.000 0.000 response.py:32(HTTPResponse) + 9 0.000 0.000 0.000 0.000 request.py:50(__init__) + 1 0.000 0.000 0.000 0.000 request.py:18(RequestMethods) + 2 0.000 0.000 0.000 0.000 re.py:206(escape) + 3 0.000 0.000 0.000 0.000 {repr} + 1 0.000 0.000 0.000 0.000 random.py:99(seed) + 1 0.000 0.000 0.000 0.000 random.py:90(__init__) + 1 0.000 0.000 0.000 0.000 random.py:793(SystemRandom) + 1 0.000 0.000 0.000 0.000 random.py:71(Random) + 1 0.000 0.000 0.000 0.000 random.py:643(WichmannHill) + 1 0.000 0.000 0.000 0.000 Queue.py:9(Empty) + 7 0.000 0.000 0.000 0.000 queue.py:53(_init) + 7 0.000 0.000 0.000 0.000 queue.py:41(__init__) + 1 0.000 0.000 0.000 0.000 queue.py:31(Queue) + 1 0.000 0.000 0.000 0.000 queue.py:272(JoinableQueue) + 1 0.000 0.000 0.000 0.000 queue.py:259(LifoQueue) + 1 0.000 0.000 0.000 0.000 queue.py:243(PriorityQueue) + 1 0.000 0.000 0.000 0.000 queue.py:235(ItemWaiter) + 3 0.000 0.000 0.000 0.000 Queue.py:234(_init) + 1 0.000 0.000 0.000 0.000 Queue.py:231(LifoQueue) + 3 0.000 0.000 0.000 0.000 Queue.py:22(__init__) + 1 0.000 0.000 0.000 0.000 Queue.py:212(PriorityQueue) + 1 0.000 0.000 0.000 0.000 Queue.py:17(Queue) + 1 0.000 0.000 0.000 0.000 Queue.py:13(Full) + 1 0.000 0.000 0.000 0.000 pprint.py:81(PrettyPrinter) + 1 0.000 0.000 0.000 0.000 pprint.py:35() + 1 0.000 0.000 0.000 0.000 pphidden_async.py:8(__init__) + 1 0.000 0.000 0.000 0.000 pphidden_async.py:7(Pp_url) + 3 0.000 0.000 0.000 0.000 {posix.uname} + 1 0.000 0.000 0.000 0.000 {posix.read} + 13 0.000 0.000 0.000 0.000 posixpath.py:59(join) + 1 0.000 0.000 0.000 0.000 posixpath.py:42(normcase) + 1 0.000 0.000 0.000 0.000 posixpath.py:117(dirname) + 1 0.000 0.000 0.000 0.000 posixpath.py:109(basename) + 1 0.000 0.000 0.000 0.000 {posix.open} + 1 0.000 0.000 0.000 0.000 {posix.close} + 1 0.000 0.000 0.000 0.000 pool.py:3() + 1 0.000 0.000 0.000 0.000 pool.py:220(pass_value) + 1 0.000 0.000 0.000 0.000 pool.py:18(__init__) + 1 0.000 0.000 0.000 0.000 pool.py:174(__init__) + 1 0.000 0.000 0.000 0.000 pool.py:172(Pool) + 1 0.000 0.000 0.000 0.000 pool.py:11(GreenletSet) + 1 0.000 0.000 0.000 0.000 poolmanager.py:27(PoolManager) + 1 0.000 0.000 0.000 0.000 poolmanager.py:147(ProxyManager) + 1 0.000 0.000 0.000 0.000 platform.py:390(_popen) + 3 0.000 0.000 0.000 0.000 platform.py:1479(python_version) + 3 0.000 0.000 0.000 0.000 platform.py:1467(python_implementation) + 6 0.000 0.000 0.000 0.000 platform.py:1364(_sys_version) + 3 0.000 0.000 0.000 0.000 platform.py:1307(release) + 1 0.000 0.000 0.000 0.000 os.py:747(urandom) + 1 0.000 0.000 0.000 0.000 os.py:35(_get_exports_list) + 1 0.000 0.000 0.000 0.000 ordered_dict.py:6() + 1 0.000 0.000 0.000 0.000 ordered_dict.py:17(OrderedDict) + 1 0.000 0.000 0.000 0.000 netrc.py:22(netrc) + 1 0.000 0.000 0.000 0.000 netrc.py:10(NetrcParseError) + 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:8(MozillaCookieJar) + 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:1() + 1 0.000 0.000 0.000 0.000 monkey.py:8(patch_os) + 1 0.000 0.000 0.000 0.000 monkey.py:68(patch_ssl) + 1 0.000 0.000 0.000 0.000 monkey.py:61(patch_dns) + 1 0.000 0.000 0.000 0.000 monkey.py:3() + 1 0.000 0.000 0.000 0.000 monkey.py:17(patch_time) + 1 0.000 0.000 0.000 0.000 models.py:442(Response) + 1 0.000 0.000 0.000 0.000 models.py:36(RequestEncodingMixin) + 1 0.000 0.000 0.000 0.000 models.py:233(PreparedRequest) + 1 0.000 0.000 0.000 0.000 models.py:156(Request) + 1 0.000 0.000 0.000 0.000 models.py:135(RequestHooksMixin) + 1 0.000 0.000 0.000 0.000 mimetypes.py:50(MimeTypes) + 1 0.000 0.000 0.000 0.000 mimetools.py:20(Message) + 4 0.000 0.000 0.000 0.000 {method 'write' of 'cStringIO.StringO' objects} + 5 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects} + 2 0.000 0.000 0.000 0.000 {method 'tostring' of 'array.array' objects} + 1 0.000 0.000 0.000 0.000 {method 'toordinal' of 'datetime.date' objects} + 2 0.000 0.000 0.000 0.000 {method 'tolist' of 'array.array' objects} + 2 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects} + 22 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects} + 6 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects} + 32 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects} + 90 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects} + 293 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects} + 1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects} + 320 0.000 0.000 0.000 0.000 {method 'iteritems' of 'dict' objects} + 254 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects} + 21 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects} + 124 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects} + 5 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects} + 2 0.000 0.000 0.000 0.000 {method 'getvalue' of 'cStringIO.StringO' objects} + 60 0.000 0.000 0.000 0.000 {method 'getsockopt' of '_socket.socket' objects} + 37 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects} + 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} + 4 0.000 0.000 0.000 0.000 {method 'count' of 'list' objects} + 21 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects} + 1 0.000 0.000 0.000 0.000 {method 'close' of 'file' objects} + 1 0.000 0.000 0.000 0.000 {method 'clear' of 'collections.deque' objects} + 296 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects} + 1 0.000 0.000 0.000 0.000 {math.sqrt} + 2 0.000 0.000 0.000 0.000 {math.log} + 1 0.000 0.000 0.000 0.000 {math.exp} + 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:49(LWPCookieJar) + 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:12() + 4 0.000 0.000 0.000 0.000 {locals} + 6 0.000 0.000 0.000 0.000 locale.py:316(normalize) + 1 0.000 0.000 0.000 0.000 keyword.py:11() + 1 0.000 0.000 0.000 0.000 {iter} + 2 0.000 0.000 0.000 0.000 {issubclass} + 1 0.000 0.000 0.000 0.000 io.py:907(BufferedReader) + 1 0.000 0.000 0.000 0.000 io.py:900(BytesIO) + 1 0.000 0.000 0.000 0.000 io.py:789(_BytesIO) + 1 0.000 0.000 0.000 0.000 io.py:72(BlockingIOError) + 1 0.000 0.000 0.000 0.000 io.py:715(_BufferedIOMixin) + 1 0.000 0.000 0.000 0.000 io.py:643(BufferedIOBase) + 1 0.000 0.000 0.000 0.000 io.py:621(FileIO) + 1 0.000 0.000 0.000 0.000 io.py:566(RawIOBase) + 1 0.000 0.000 0.000 0.000 io.py:294(IOBase) + 1 0.000 0.000 0.000 0.000 io.py:290(UnsupportedOperation) + 1 0.000 0.000 0.000 0.000 io.py:276(OpenWrapper) + 1 0.000 0.000 0.000 0.000 io.py:267(_DocDescriptor) + 1 0.000 0.000 0.000 0.000 io.py:1880(StringIO) + 1 0.000 0.000 0.000 0.000 io.py:1379(TextIOWrapper) + 1 0.000 0.000 0.000 0.000 io.py:1303(IncrementalNewlineDecoder) + 1 0.000 0.000 0.000 0.000 io.py:1255(TextIOBase) + 1 0.000 0.000 0.000 0.000 io.py:1187(BufferedRandom) + 1 0.000 0.000 0.000 0.000 io.py:1121(BufferedRWPair) + 1 0.000 0.000 0.000 0.000 io.py:1032(BufferedWriter) + 2 0.000 0.000 0.000 0.000 __init__.py:983(_fixupChildren) + 1 0.000 0.000 0.000 0.000 __init__.py:918(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:913(Manager) + 10 0.000 0.000 0.000 0.000 __init__.py:879(append) + 3 0.000 0.000 0.000 0.000 __init__.py:872(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:866(PlaceHolder) + 1 0.000 0.000 0.000 0.000 __init__.py:806(FileHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:7(CertificateError) + 3 0.000 0.000 0.000 0.000 __init__.py:78(CFUNCTYPE) + 1 0.000 0.000 0.000 0.000 __init__.py:739(StreamHandler) + 1 0.000 0.000 0.000 0.000 __init__.py:67(NullHandler) + 2 0.000 0.000 0.000 0.000 __init__.py:614(createLock) + 2 0.000 0.000 0.000 0.000 __init__.py:597(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:588(Handler) + 10 0.000 0.000 0.000 0.000 __init__.py:546(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:541(Filterer) + 1 0.000 0.000 0.000 0.000 __init__.py:504(Filter) + 5 0.000 0.000 0.000 0.000 __init__.py:49(normalize_encoding) + 3 0.000 0.000 0.000 0.000 __init__.py:481(CFunctionType) + 3 0.000 0.000 0.000 0.000 __init__.py:480(PYFUNCTYPE) + 1 0.000 0.000 0.000 0.000 __init__.py:462(BufferingFormatter) + 2 0.000 0.000 0.000 0.000 __init__.py:417(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:416(LibraryLoader) + 1 0.000 0.000 0.000 0.000 __init__.py:376(PyDLL) + 4 0.000 0.000 0.000 0.000 __init__.py:370(__getitem__) + 1 0.000 0.000 0.000 0.000 __init__.py:368(__init__) + 4 0.000 0.000 0.000 0.000 __init__.py:363(__getattr__) + 1 0.000 0.000 0.000 0.000 __init__.py:34(NullHandler) + 3 0.000 0.000 0.000 0.000 __init__.py:347(_FuncPtr) + 1 0.000 0.000 0.000 0.000 __init__.py:324(Formatter) + 1 0.000 0.000 0.000 0.000 __init__.py:320(CDLL) + 1 0.000 0.000 0.000 0.000 __init__.py:278(c_wchar) + 1 0.000 0.000 0.000 0.000 __init__.py:275(c_wchar_p) + 1 0.000 0.000 0.000 0.000 __init__.py:260(c_bool) + 1 0.000 0.000 0.000 0.000 __init__.py:255(c_void_p) + 1 0.000 0.000 0.000 0.000 __init__.py:243(c_char_p) + 1 0.000 0.000 0.000 0.000 __init__.py:238(c_char) + 1 0.000 0.000 0.000 0.000 __init__.py:233(c_byte) + 1 0.000 0.000 0.000 0.000 __init__.py:226(c_ubyte) + 1 0.000 0.000 0.000 0.000 __init__.py:214(LogRecord) + 1 0.000 0.000 0.000 0.000 __init__.py:205(c_longdouble) + 9 0.000 0.000 0.000 0.000 __init__.py:203(_releaseLock) + 1 0.000 0.000 0.000 0.000 __init__.py:201(c_double) + 1 0.000 0.000 0.000 0.000 __init__.py:197(c_float) + 9 0.000 0.000 0.000 0.000 __init__.py:194(_acquireLock) + 1 0.000 0.000 0.000 0.000 __init__.py:193(c_uint) + 1 0.000 0.000 0.000 0.000 __init__.py:18() + 1 0.000 0.000 0.000 0.000 __init__.py:189(c_int) + 1 0.000 0.000 0.000 0.000 __init__.py:180(c_ulong) + 1 0.000 0.000 0.000 0.000 __init__.py:176(c_long) + 1 0.000 0.000 0.000 0.000 __init__.py:172(c_ushort) + 1 0.000 0.000 0.000 0.000 __init__.py:168(c_short) + 1 0.000 0.000 0.000 0.000 __init__.py:159(py_object) + 14 0.000 0.000 0.000 0.000 __init__.py:147(_check_size) + 1 0.000 0.000 0.000 0.000 __init__.py:1266(LoggerAdapter) + 1 0.000 0.000 0.000 0.000 __init__.py:1258(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:1252(RootLogger) + 2 0.000 0.000 0.000 0.000 __init__.py:1185(addHandler) + 3 0.000 0.000 0.000 0.000 __init__.py:104(CFunctionType) + 8 0.000 0.000 0.000 0.000 __init__.py:1016(__init__) + 1 0.000 0.000 0.000 0.000 __init__.py:1001(Logger) + 1 0.000 0.000 0.000 0.000 idna.py:279(getregentry) + 1 0.000 0.000 0.000 0.000 idna.py:274(StreamReader) + 1 0.000 0.000 0.000 0.000 idna.py:271(StreamWriter) + 1 0.000 0.000 0.000 0.000 idna.py:231(IncrementalDecoder) + 1 0.000 0.000 0.000 0.000 idna.py:197(IncrementalEncoder) + 1 0.000 0.000 0.000 0.000 idna.py:146(Codec) + 1 0.000 0.000 0.000 0.000 hub.py:95(signal) + 290/1 0.010 0.000 0.000 0.000 hub.py:61(sleep) + 1 0.000 0.000 0.000 0.000 hub.py:317(_NONE) + 106 0.000 0.000 0.000 0.000 hub.py:243(__init__) + 1 0.000 0.000 0.000 0.000 hub.py:207(Waiter) + 1 0.000 0.000 0.000 0.000 hub.py:200(DispatchExit) + 693/2 0.025 0.000 0.000 0.000 hub.py:142(switch) + 1 0.000 0.000 0.000 0.000 hub.py:138(__init__) + 1 0.000 0.000 0.000 0.000 hub.py:132(Hub) + 30/1 0.000 0.000 0.000 0.000 httplib.py:717(connect) + 30 0.000 0.000 0.000 0.000 httplib.py:678(_set_hostport) + 30 0.000 0.000 0.000 0.000 httplib.py:649(__init__) + 1 0.000 0.000 0.000 0.000 httplib.py:638(HTTPConnection) + 1 0.000 0.000 0.000 0.000 httplib.py:319(HTTPResponse) + 1 0.000 0.000 0.000 0.000 httplib.py:214(HTTPMessage) + 1 0.000 0.000 0.000 0.000 httplib.py:1209(LineAndFileWrapper) + 1 0.000 0.000 0.000 0.000 httplib.py:1201(BadStatusLine) + 1 0.000 0.000 0.000 0.000 httplib.py:1198(ResponseNotReady) + 1 0.000 0.000 0.000 0.000 httplib.py:1195(CannotSendHeader) + 1 0.000 0.000 0.000 0.000 httplib.py:1192(CannotSendRequest) + 1 0.000 0.000 0.000 0.000 httplib.py:1189(ImproperConnectionState) + 1 0.000 0.000 0.000 0.000 httplib.py:1175(IncompleteRead) + 1 0.000 0.000 0.000 0.000 httplib.py:1172(UnimplementedFileMode) + 1 0.000 0.000 0.000 0.000 httplib.py:1169(UnknownTransferEncoding) + 1 0.000 0.000 0.000 0.000 httplib.py:1164(UnknownProtocol) + 1 0.000 0.000 0.000 0.000 httplib.py:1161(InvalidURL) + 1 0.000 0.000 0.000 0.000 httplib.py:1158(NotConnected) + 1 0.000 0.000 0.000 0.000 httplib.py:1153(HTTPException) + 1 0.000 0.000 0.000 0.000 httplib.py:1120(HTTPS) + 1 0.000 0.000 0.000 0.000 httplib.py:1098(HTTPSConnection) + 1 0.000 0.000 0.000 0.000 httplib.py:1004(HTTP) + 1 0.000 0.000 0.000 0.000 hooks.py:14() + 10 0.000 0.000 0.000 0.000 hashlib.py:109() + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha512} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha384} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha256} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha224} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha1} + 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_md5} + 320 0.000 0.000 0.000 0.000 {hash} + 1 0.000 0.000 0.000 0.000 gzip.py:4() + 1 0.000 0.000 0.000 0.000 gzip.py:35(GzipFile) + 1 0.000 0.000 0.000 0.000 grequests.py:69(AsyncRequest) + 1 0.000 0.000 0.000 0.000 greenlet.py:71(GreenletLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:59(FailureSpawnedLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:568(LinkedFailed) + 1 0.000 0.000 0.000 0.000 greenlet.py:555(LinkedKilled) + 1 0.000 0.000 0.000 0.000 greenlet.py:544(LinkedCompleted) + 1 0.000 0.000 0.000 0.000 greenlet.py:540(LinkedExited) + 1 0.000 0.000 0.000 0.000 greenlet.py:47(SuccessSpawnedLink) + 60 0.000 0.000 0.000 0.000 greenlet.py:284(kill) + 1 0.000 0.000 0.000 0.000 greenlet.py:16(SpawnedLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:140(Greenlet) + 1 0.000 0.000 0.000 0.000 greenlet.py:127(FailureGreenletLink) + 1 0.000 0.000 0.000 0.000 greenlet.py:114(SuccessGreenletLink) + 1 0.000 0.000 0.000 0.000 grbrute.py:42(Grbrute) + 1 0.000 0.000 0.000 0.000 grbrute.py:20(SessionQueue) + 247 0.000 0.000 0.000 0.000 {globals} + 1 0.000 0.000 0.000 0.000 {gevent.core.dns_init} + 7 0.000 0.000 0.000 0.000 __future__.py:75(__init__) + 1 0.000 0.000 0.000 0.000 __future__.py:74(_Feature) + 1 0.000 0.000 0.000 0.000 __future__.py:48() + 1 0.000 0.000 0.000 0.000 {function seed at 0x1d496e0} + 2 0.000 0.000 0.000 0.000 {filter} + 1 0.000 0.000 0.000 0.000 exceptions.py:80(LocationParseError) + 1 0.000 0.000 0.000 0.000 exceptions.py:75(ClosedPoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:70(EmptyPoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:65(TimeoutError) + 1 0.000 0.000 0.000 0.000 exceptions.py:54(InvalidURL) + 1 0.000 0.000 0.000 0.000 exceptions.py:54(HostChangedError) + 1 0.000 0.000 0.000 0.000 exceptions.py:50(InvalidSchema) + 1 0.000 0.000 0.000 0.000 exceptions.py:46(MissingSchema) + 1 0.000 0.000 0.000 0.000 exceptions.py:42(TooManyRedirects) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(URLRequired) + 1 0.000 0.000 0.000 0.000 exceptions.py:38(MaxRetryError) + 1 0.000 0.000 0.000 0.000 exceptions.py:34(Timeout) + 1 0.000 0.000 0.000 0.000 exceptions.py:31(DecodeError) + 1 0.000 0.000 0.000 0.000 exceptions.py:30(SSLError) + 1 0.000 0.000 0.000 0.000 exceptions.py:26(SSLError) + 1 0.000 0.000 0.000 0.000 exceptions.py:26(ConnectionError) + 1 0.000 0.000 0.000 0.000 exceptions.py:17(HTTPError) + 1 0.000 0.000 0.000 0.000 exceptions.py:15(PoolError) + 1 0.000 0.000 0.000 0.000 exceptions.py:12(RequestException) + 1 0.000 0.000 0.000 0.000 exceptions.py:10(HTTPError) + 1 0.000 0.000 0.000 0.000 _endian.py:4() + 1 0.000 0.000 0.000 0.000 _endian.py:45(BigEndianStructure) + 1 0.000 0.000 0.000 0.000 _endian.py:22(_swapped_meta) + 1 0.000 0.000 0.000 0.000 encoder.py:87(JSONEncoder) + 1 0.000 0.000 0.000 0.000 encoder.py:119(__init__) + 1 0.000 0.000 0.000 0.000 dns.py:7() + 30/1 0.000 0.000 0.000 0.000 dns.py:46(resolve_ipv4) + 1 0.000 0.000 0.000 0.000 dns.py:27(DNSError) + 2 0.000 0.000 0.000 0.000 {dir} + 1 0.000 0.000 0.000 0.000 {delattr} + 1 0.000 0.000 0.000 0.000 decoder.py:276(__init__) + 38 0.000 0.000 0.000 0.000 {_ctypes.sizeof} + 1 0.000 0.000 0.000 0.000 {_ctypes.set_conversion_mode} + 2 0.000 0.000 0.000 0.000 {_ctypes.POINTER} + 3 0.000 0.000 0.000 0.000 {_ctypes.dlopen} + 1 0.000 0.000 0.000 0.000 cookies.py:73(MockResponse) + 320 0.000 0.000 0.000 0.000 cookies.py:65(get_new_headers) + 1 0.000 0.000 0.000 0.000 cookies.py:20(MockRequest) + 1 0.000 0.000 0.000 0.000 cookies.py:136(RequestsCookieJar) + 1 0.000 0.000 0.000 0.000 cookies.py:131(CookieConflictError) + 1 0.000 0.000 0.000 0.000 Cookie.py:705(SmartCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:679(SerialCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:665(SimpleCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:549(BaseCookie) + 1 0.000 0.000 0.000 0.000 Cookie.py:403(Morsel) + 1 0.000 0.000 0.000 0.000 Cookie.py:232(CookieError) + 1 0.000 0.000 0.000 0.000 cookielib.py:838(DefaultCookiePolicy) + 1 0.000 0.000 0.000 0.000 cookielib.py:805(CookiePolicy) + 1 0.000 0.000 0.000 0.000 cookielib.py:707(Cookie) + 1 0.000 0.000 0.000 0.000 cookielib.py:1733(FileCookieJar) + 1 0.000 0.000 0.000 0.000 cookielib.py:1731(LoadError) + 1 0.000 0.000 0.000 0.000 cookielib.py:1199(Absent) + 1 0.000 0.000 0.000 0.000 connectionpool.py:74(VerifiedHTTPSConnection) + 1 0.000 0.000 0.000 0.000 connectionpool.py:497(HTTPSConnectionPool) + 1 0.000 0.000 0.000 0.000 connectionpool.py:130(HTTPConnectionPool) + 3 0.000 0.000 0.000 0.000 connectionpool.py:121(__init__) + 1 0.000 0.000 0.000 0.000 connectionpool.py:112(ConnectionPool) + 21 0.000 0.000 0.000 0.000 collections.py:61() + 21 0.000 0.000 0.000 0.000 collections.py:60() + 3 0.000 0.000 0.000 0.000 _collections.py:52(__setitem__) + 145 0.000 0.000 0.000 0.000 collections.py:43() + 6 0.000 0.000 0.000 0.000 _collections.py:38(__init__) + 1 0.000 0.000 0.000 0.000 _collections.py:22(RecentlyUsedContainer) + 2 0.000 0.000 0.000 0.000 codecs.py:77(__new__) + 1 0.000 0.000 0.000 0.000 {_codecs.lookup} + 1 0.000 0.000 0.000 0.000 cgi.py:857(FormContent) + 1 0.000 0.000 0.000 0.000 cgi.py:829(InterpFormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:795(SvFormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:775(FormContentDict) + 1 0.000 0.000 0.000 0.000 cgi.py:353(FieldStorage) + 1 0.000 0.000 0.000 0.000 cgi.py:328(MiniFieldStorage) + 1 0.000 0.000 0.000 0.000 certs.py:18(where) + 1 0.000 0.000 0.000 0.000 certs.py:13() + 2 0.000 0.000 0.000 0.000 calendar.py:71(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:66(_localized_day) + 1 0.000 0.000 0.000 0.000 calendar.py:531(LocaleHTMLCalendar) + 2 0.000 0.000 0.000 0.000 calendar.py:52(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:496(LocaleTextCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:484(TimeEncoding) + 1 0.000 0.000 0.000 0.000 calendar.py:47(_localized_month) + 1 0.000 0.000 0.000 0.000 calendar.py:372(HTMLCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:28(IllegalWeekdayError) + 1 0.000 0.000 0.000 0.000 calendar.py:255(TextCalendar) + 1 0.000 0.000 0.000 0.000 calendar.py:21(IllegalMonthError) + 1 0.000 0.000 0.000 0.000 calendar.py:138(setfirstweekday) + 1 0.000 0.000 0.000 0.000 calendar.py:132(__init__) + 1 0.000 0.000 0.000 0.000 calendar.py:126(Calendar) + 65 0.000 0.000 0.000 0.000 {built-in method match} + 2 0.000 0.000 0.000 0.000 {built-in method groups} + 2 0.000 0.000 0.000 0.000 {built-in method group} + 1 0.000 0.000 0.000 0.000 bisect.py:1() + 1 0.000 0.000 0.000 0.000 {binascii.hexlify} + 1 0.000 0.000 0.000 0.000 auth.py:58(HTTPDigestAuth) + 1 0.000 0.000 0.000 0.000 auth.py:51(HTTPProxyAuth) + 1 0.000 0.000 0.000 0.000 auth.py:40(HTTPBasicAuth) + 1 0.000 0.000 0.000 0.000 auth.py:33(AuthBase) + 1 0.000 0.000 0.000 0.000 atexit.py:6() + 1 0.000 0.000 0.000 0.000 atexit.py:37(register) + 1 0.000 0.000 0.000 0.000 ascii.py:8() + 1 0.000 0.000 0.000 0.000 ascii.py:41(getregentry) + 1 0.000 0.000 0.000 0.000 ascii.py:34(StreamConverter) + 1 0.000 0.000 0.000 0.000 ascii.py:31(StreamReader) + 1 0.000 0.000 0.000 0.000 ascii.py:28(StreamWriter) + 1 0.000 0.000 0.000 0.000 ascii.py:24(IncrementalDecoder) + 1 0.000 0.000 0.000 0.000 ascii.py:20(IncrementalEncoder) + 1 0.000 0.000 0.000 0.000 ascii.py:13(Codec) + 1 0.000 0.000 0.000 0.000 argparse.py:987(_CountAction) + 1 0.000 0.000 0.000 0.000 argparse.py:961(_AppendConstAction) + 1 0.000 0.000 0.000 0.000 argparse.py:924(_AppendAction) + 1 0.000 0.000 0.000 0.000 argparse.py:907(_StoreFalseAction) + 1 0.000 0.000 0.000 0.000 argparse.py:892(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:890(_StoreTrueAction) + 1 0.000 0.000 0.000 0.000 argparse.py:869(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:867(_StoreConstAction) + 3 0.000 0.000 0.000 0.000 argparse.py:863(__call__) + 3 0.000 0.000 0.000 0.000 argparse.py:834(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:832(_StoreAction) + 5 0.000 0.000 0.000 0.000 argparse.py:792(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:741(Action) + 1 0.000 0.000 0.000 0.000 argparse.py:732(ArgumentTypeError) + 1 0.000 0.000 0.000 0.000 argparse.py:712(ArgumentError) + 1 0.000 0.000 0.000 0.000 argparse.py:678(ArgumentDefaultsHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:667(RawTextHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:656(RawDescriptionHelpFormatter) + 1 0.000 0.000 0.000 0.000 argparse.py:230(_Section) + 3 0.000 0.000 0.000 0.000 argparse.py:2256(_check_value) + 3 0.000 0.000 0.000 0.000 argparse.py:2231(_get_value) + 3 0.000 0.000 0.000 0.000 argparse.py:2182(_get_values) + 3 0.000 0.000 0.000 0.000 argparse.py:2138(_get_nargs_pattern) + 3 0.000 0.000 0.000 0.000 argparse.py:2037(_parse_optional) + 1 0.000 0.000 0.000 0.000 argparse.py:182(HelpFormatter) + 3 0.000 0.000 0.000 0.000 argparse.py:1782(take_action) + 1 0.000 0.000 0.000 0.000 argparse.py:1689(_get_positional_actions) + 5 0.000 0.000 0.000 0.000 argparse.py:1677(_add_action) + 1 0.000 0.000 0.000 0.000 argparse.py:1538(ArgumentParser) + 1 0.000 0.000 0.000 0.000 argparse.py:1518(_MutuallyExclusiveGroup) + 5 0.000 0.000 0.000 0.000 argparse.py:1508(_add_action) + 2 0.000 0.000 0.000 0.000 argparse.py:1487(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1485(_ArgumentGroup) + 1 0.000 0.000 0.000 0.000 argparse.py:147(_AttributeHolder) + 5 0.000 0.000 0.000 0.000 argparse.py:1449(_check_conflict) + 3 0.000 0.000 0.000 0.000 argparse.py:1440(_get_handler) + 5 0.000 0.000 0.000 0.000 argparse.py:1436(_pop_action_class) + 2 0.000 0.000 0.000 0.000 argparse.py:1401(_get_optional_kwargs) + 3 0.000 0.000 0.000 0.000 argparse.py:1385(_get_positional_kwargs) + 5 0.000 0.000 0.000 0.000 argparse.py:1321(_add_action) + 2 0.000 0.000 0.000 0.000 argparse.py:1311(add_argument_group) + 13 0.000 0.000 0.000 0.000 argparse.py:1246(_registry_get) + 34 0.000 0.000 0.000 0.000 argparse.py:1242(register) + 13 0.000 0.000 0.000 0.000 argparse.py:122(_callable) + 1 0.000 0.000 0.000 0.000 argparse.py:1188(_ActionsContainer) + 1 0.000 0.000 0.000 0.000 argparse.py:1174(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1167(Namespace) + 1 0.000 0.000 0.000 0.000 argparse.py:1124(FileType) + 1 0.000 0.000 0.000 0.000 argparse.py:1054(_ChoicesPseudoAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1052(_SubParsersAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1027(_VersionAction) + 1 0.000 0.000 0.000 0.000 argparse.py:1010(__init__) + 1 0.000 0.000 0.000 0.000 argparse.py:1008(_HelpAction) + 1 0.000 0.000 0.000 0.000 adapters.py:9() + 1 0.000 0.000 0.000 0.000 adapters.py:45(HTTPAdapter) + 6 0.000 0.000 0.000 0.000 adapters.py:35(__init__) + 1 0.000 0.000 0.000 0.000 adapters.py:32(BaseAdapter) + 1 0.000 0.000 0.000 0.000 abc.py:145(__subclasscheck__) + 2 0.000 0.000 0.000 0.000 _abcoll.py:26() + 1 0.000 0.000 0.000 0.000 _abcoll.py:24(_hasattr) + 1 0.000 0.000 0.000 0.000 _abcoll.py:127(__subclasshook__) + + diff --git a/toys/brhute/grequests.py b/toys/brhute/grequests.py new file mode 100644 index 0000000..b10f0d4 --- /dev/null +++ b/toys/brhute/grequests.py @@ -0,0 +1,182 @@ +# -*- coding: utf-8 -*- + +# Laurent's version of grequests.py : +# Merged https://github.com/kennethreitz/grequests/pull/22/files +# in recent grequest branch, to have working exception_handler + +""" +grequests +~~~~~~~~~ + +This module contains an asynchronous replica of ``requests.api``, powered +by gevent. All API methods return a ``Request`` instance (as opposed to +``Response``). A list of requests can be sent with ``map()``. +""" +from functools import partial + +try: + import gevent + from gevent import monkey as curious_george + from gevent.pool import Pool +except ImportError: + raise RuntimeError('Gevent is required for grequests.') + +# Monkey-patch. +curious_george.patch_all(thread=False, select=False) + +from requests import Session + +def _greenlet_report_error(self, exc_info): + import sys + import traceback + + exception = exc_info[1] + if isinstance(exception, gevent.greenlet.GreenletExit): + self._report_result(exception) + return + exc_handler = False + for lnk in self._links: + if isinstance(lnk, gevent.greenlet.FailureSpawnedLink): + exc_handler = True + break + if not exc_handler: + try: + traceback.print_exception(*exc_info) + except: + pass + self._exception = exception + if self._links and self._notifier is None: + self._notifier = gevent.greenlet.core.active_event(self._notify_links) + ## Only print errors + if not exc_handler: + info = str(self) + ' failed with ' + try: + info += self._exception.__class__.__name__ + except Exception: + info += str(self._exception) or repr(self._exception) + sys.stderr.write(info + '\n\n') + + +## Patch the greenlet error reporting +gevent.greenlet.Greenlet._report_error = _greenlet_report_error + +__all__ = ( + 'map', 'imap', + 'get', 'options', 'head', 'post', 'put', 'patch', 'delete', 'request' +) + + +class AsyncRequest(object): + """ Asynchronous request. + + Accept same parameters as ``Session.request`` and some additional: + + :param session: Session which will do request + :param callback: Callback called on response. + Same as passing ``hooks={'response': callback}`` + """ + def __init__(self, method, url, **kwargs): + #: Request method + self.method = method + #: URL to request + self.url = url + #: Associated ``Session`` + self.session = kwargs.pop('session', None) + if self.session is None: + self.session = Session() + + callback = kwargs.pop('callback', None) + if callback: + kwargs['hooks'] = {'response': callback} + + #: The rest arguments for ``Session.request`` + self.kwargs = kwargs + #: Resulting ``Response`` + self.response = None + + def send(self, **kwargs): + """ + Prepares request based on parameter passed to constructor and optional ``kwargs```. + Then sends request and saves response to :attr:`response` + + :returns: ``Response`` + """ + merged_kwargs = {} + merged_kwargs.update(self.kwargs) + merged_kwargs.update(kwargs) + self.response = self.session.request(self.method, + self.url, **merged_kwargs) + return self.response + + +def send(r, pool=None, stream=False, exception_handler=None): + """Sends the request object using the specified pool. If a pool isn't + specified this method blocks. Pools are useful because you can specify size + and can hence limit concurrency.""" + if pool != None: + p = pool.spawn + else: + p = gevent.spawn + + if exception_handler: + glet = p(r.send, stream=stream) + + def eh_wrapper(g): + return exception_handler(r,g.exception) + + glet.link_exception(eh_wrapper) + else: + glet = p(r.send, stream=stream) + + return glet + + +# Shortcuts for creating AsyncRequest with appropriate HTTP method +get = partial(AsyncRequest, 'GET') +options = partial(AsyncRequest, 'OPTIONS') +head = partial(AsyncRequest, 'HEAD') +post = partial(AsyncRequest, 'POST') +put = partial(AsyncRequest, 'PUT') +patch = partial(AsyncRequest, 'PATCH') +delete = partial(AsyncRequest, 'DELETE') + +# synonym +def request(method, url, **kwargs): + return AsyncRequest(method, url, **kwargs) + + +def map(requests, stream=False, size=None, exception_handler=None): + """Concurrently converts a list of Requests to Responses. + + :param requests: a collection of Request objects. + :param stream: If True, the content will not be downloaded immediately. + :param size: Specifies the number of requests to make at a time. If None, no throttling occurs. + """ + + requests = list(requests) + + pool = Pool(size) if size else None + jobs = [send(r, pool, stream=stream, exception_handler=exception_handler) for r in requests] + gevent.joinall(jobs) + + return [r.response for r in requests] + + +def imap(requests, stream=False, size=2, exception_handler=None): + """Concurrently converts a generator object of Requests to + a generator of Responses. + + :param requests: a generator of Request objects. + :param stream: If True, the content will not be downloaded immediately. + :param size: Specifies the number of requests to make at a time. default is 2 + """ + + pool = Pool(size) + + def send(r): + return r.send(stream=stream, exception_handler=exception_handler) + + for r in pool.imap_unordered(send, requests): + yield r + + pool.join() diff --git a/toys/brhute/httplib_pipelining.py b/toys/brhute/httplib_pipelining.py new file mode 100644 index 0000000..5f5ac4e --- /dev/null +++ b/toys/brhute/httplib_pipelining.py @@ -0,0 +1,96 @@ +# Based on "python-http-pipelining" by Markus J @ ActiveState Code / Recipes +# http://code.activestate.com/recipes/576673-python-http-pipelining/ +# Rewrote by: 2013 Laurent Ghigonis + +from httplib import HTTPConnection, _CS_IDLE +import urlparse + +class HTTP_pipeline(): + def __init__(self, domain, queue, cb_response, + max_out_bound=4, debuglevel=0): + print "XXX HTTP_pipeline.__init__" + self.queue = queue + self.cb_response = cb_response + self.max_out_bound = max_out_bound + self.debuglevel = debuglevel + self.conn = HTTPConnection(domain) + self.conn.set_debuglevel(debuglevel) + self.respobjs = list() + self.data = list() + self.headers = {'Host':domain, + 'Content-Length':0, + 'Connection':'Keep-Alive'} + + def run(self): + print "XXX HTTP_pipeline.run" + while True: + # Send + out_bound = 0 + while out_bound < self.max_out_bound: + page = self.queue.get() + if self.debuglevel > 0: + print 'Sending request for %r...' % (page,) + self.conn._HTTPConnection__state = _CS_IDLE # FU private variable! + self.conn.request("GET", page, None, self.headers) + res = self.conn.response_class(self.conn.sock, strict=self.conn.strict, method=self.conn._method) + self.respobjs.append(res) + self.data.append(None) + out_bound += 1 + # Try to read a response + for i,resp in enumerate(self.respobjs): + if resp is None: + continue + if self.debuglevel > 0: + print 'Retrieving %r...' % (resp) + out_bound -= 1 + skip_read = False + resp.begin() + if self.debuglevel > 0: + print ' %d %s' % (resp.status, resp.reason) + if 200 <= resp.status < 300: + # Ok + data = resp.read() + cookie = resp.getheader('Set-Cookie') + if cookie is not None: + self.headers['Cookie'] = cookie + skip_read = True + self.respobjs.remove(resp) + self.cb_response(resp, data) + elif 300 <= resp.status < 400: + # Redirect + loc = resp.getheader('Location') + parsed = loc and urlparse.urlparse(loc) + if not parsed: + # Missing or empty location header + data = (resp.status, resp.reason) + elif parsed.netloc != '' and parsed.netloc != host: + # Redirect to another host + data = (resp.status, resp.reason, loc) + else: + # Redirect URL + path = urlparse.urlunparse(parsed._replace(scheme='',netloc='',fragment='')) + #print ' Updated %r to %r' % (pages[i],path) + #pages[i] = path + data = (resp.status, resp.reason, path) + self.respobjs.remove(resp) + self.cb_response(resp, data) + elif resp.status >= 400: + # Failed + data = (resp.status, resp.reason) + self.respobjs.remove(resp) + self.cb_response(resp, data) + if resp.will_close: + # Connection (will be) closed, need to resend + self.conn.close() + if self.debuglevel > 0: + print ' Connection closed' + # XXX reconnect + # XXX resend + break + elif not skip_read: + resp.read() # read any data + if any(r is None for r in enumerate(self.respobjs)): + # Send another pending request + break + else: + break # All respobjs are None? diff --git a/toys/brhute/pphidden.py b/toys/brhute/pphidden.py new file mode 100644 index 0000000..cef18e2 --- /dev/null +++ b/toys/brhute/pphidden.py @@ -0,0 +1,29 @@ +import requests +import time +import sys + +# http://www.pointerpointer.com/gridPositions.json + +BASE_URL="http://www.pointerpointer.com/images" + +image = int(sys.argv[1]) +sx = int(sys.argv[2]) +sy = int(sys.argv[3]) + +print ">>> Looking for image %d <<<" % image +print ">>>> starting x=%d y=%d <<<<" % (sx, sy) + +s = requests.Session() + +for x in range(sx, 2000): + for y in range(sy, 2000): + url = "%s/N%04d_%d_%d.jpg" % (BASE_URL, image, x, y) + sys.stdout.write("[-] %s: " % url) + sys.stdout.flush() + r = s.get(url) + print r.status_code + if r.status_code != 404: + print "[*] found !" + sys.exit(0) + # time.sleep(0.2) +sys.exit(1) diff --git a/toys/brhute/pphidden_async.py b/toys/brhute/pphidden_async.py new file mode 100644 index 0000000..463364f --- /dev/null +++ b/toys/brhute/pphidden_async.py @@ -0,0 +1,83 @@ +import sys +import argparse +import grbrute +import brhute_threaded + +# http://www.pointerpointer.com/gridPositions.json + +class Pp_url: + def __init__(self, image, x, y, max_x=100, max_y=100): + self.host = "www.pointerpointer.com" + self.base_url = "/images" + self.image = image + self.x = x + self.y = y + self.max_x = max_x + self.max_y = max_y + print ">>> Looking for image %d <<<" % image + print ">>>> starting x=%d y=%d <<<<" % (x, y) + def __iter__(self): + return self + def next(self): + url = "%s/N%04d_%d_%d.jpg" % (self.base_url, self.image, self.x, self.y) + self.y += 1 + if self.y > self.max_y: + self.x += 1 + self.y = 0 + if self.x > self.max_x: + raise StopIteration + return (self.host, url) + +def cb_response_grbrute(res): + global found + if not found: + print "[-] %s : %d" % (res.url, res.status_code) + if res.status_code != 404: + found = res.url + return False + return True + +def cb_response_brhute(res): + global found + if not found: + print "res: %s" % res + #if res.status_code != 404: + # found = res.url + # return False + #return True + +parser = argparse.ArgumentParser(description='pphidden_async', + epilog="Example: %s 73 0 0" % sys.argv[0]) +parser.add_argument('image', action="store", type=int, + help="Image number") +parser.add_argument('start_x', action="store", type=int, + help="Start at coordinate X=") +parser.add_argument('start_y', action="store", type=int, + help="Start at coordinate Y=") +parser.add_argument('-b', action="store", dest="backend", default="gbrute", + help="Backend, can be gbrute (default) or brhute (work in progress)") +parser.add_argument('-v', action="store_true", dest="verbose", default=False, + help="verbose") +args = parser.parse_args() + +found = None + +if args.backend == "gbrute": + url_iter = Pp_url(args.image, args.start_x, args.start_y) + grbrute.Grbrute(url_iter, cb_response_grbrute, verbose=args.verbose) +elif args.backend == "brhute": + url_iter = Pp_url(args.image, args.start_x, args.start_y) + #brhute_threaded.Brhute_ip(url_iter, "207.171.163.203", # Amazon + # cb_response=cb_response_brhute, verbose=args.verbose) + #brhute.Brhute_ip(url_iter, "173.194.34.14", # Google + # cb_response=cb_response_brhute, verbose=args.verbose) + brhute_threaded.Brhute_ip(url_iter, "www.pointerpointer.com", # Amazon + cb_response=cb_response_brhute, verbose=args.verbose) +else: + print "Error: Unknown backend specified" + sys.exit(1) + +if found is False: + print "[*] not found" + sys.exit(1) +print "[*] found: %s" % found diff --git a/toys/brhute/threaded_resolver.py b/toys/brhute/threaded_resolver.py new file mode 100644 index 0000000..a2d347b --- /dev/null +++ b/toys/brhute/threaded_resolver.py @@ -0,0 +1,302 @@ +# From pyxmpp2 resolver.py +# Made standalone by laurent +# https://raw.github.com/Jajcus/pyxmpp2/master/pyxmpp2/resolver.py + +# (C) Copyright 2003-2011 Jacek Konieczny +# (C) Copyright 2013 Laurent Ghigonis +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU Lesser General Public License Version +# 2.1 as published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +# + +"""DNS resolever with SRV record support. + +Normative reference: + - `RFC 1035 `__ + - `RFC 2782 `__ +""" + +import socket +import random +import logging +import threading +import Queue + +import dns.resolver +import dns.name +import dns.exception + +DEFAULT_SETTINGS = {"ipv4": True, "ipv6": False, "prefer_ipv6": False} + +def is_ipv6_available(): + """Check if IPv6 is available. + + :Return: `True` when an IPv6 socket can be created. + """ + try: + socket.socket(socket.AF_INET6).close() + except (socket.error, AttributeError): + return False + return True + +def is_ipv4_available(): + """Check if IPv4 is available. + + :Return: `True` when an IPv4 socket can be created. + """ + try: + socket.socket(socket.AF_INET).close() + except socket.error: + return False + return True + +def shuffle_srv(records): + """Randomly reorder SRV records using their weights. + + :Parameters: + - `records`: SRV records to shuffle. + :Types: + - `records`: sequence of :dns:`dns.rdtypes.IN.SRV` + + :return: reordered records. + :returntype: `list` of :dns:`dns.rdtypes.IN.SRV`""" + if not records: + return [] + ret = [] + while len(records) > 1: + weight_sum = 0 + for rrecord in records: + weight_sum += rrecord.weight + 0.1 + thres = random.random() * weight_sum + weight_sum = 0 + for rrecord in records: + weight_sum += rrecord.weight + 0.1 + if thres < weight_sum: + records.remove(rrecord) + ret.append(rrecord) + break + ret.append(records[0]) + return ret + +def reorder_srv(records): + """Reorder SRV records using their priorities and weights. + + :Parameters: + - `records`: SRV records to shuffle. + :Types: + - `records`: `list` of :dns:`dns.rdtypes.IN.SRV` + + :return: reordered records. + :returntype: `list` of :dns:`dns.rdtypes.IN.SRV`""" + records = list(records) + records.sort() + ret = [] + tmp = [] + for rrecord in records: + if not tmp or rrecord.priority == tmp[0].priority: + tmp.append(rrecord) + continue + ret += shuffle_srv(tmp) + tmp = [rrecord] + if tmp: + ret += shuffle_srv(tmp) + return ret + +class BlockingResolver(): + """Blocking resolver using the DNSPython package. + + Both `resolve_srv` and `resolve_address` will block until the + lookup completes or fail and then call the callback immediately. + """ + def __init__(self, settings = None): + if settings: + self.settings = settings + else: + self.settings = DEFAULT_SETTINGS + + def resolve_srv(self, domain, service, protocol, callback): + """Start looking up an SRV record for `service` at `domain`. + + `callback` will be called with a properly sorted list of (hostname, + port) pairs on success. The list will be empty on error and it will + contain only (".", 0) when the service is explicitely disabled. + + :Parameters: + - `domain`: domain name to look up + - `service`: service name e.g. 'xmpp-client' + - `protocol`: protocol name, e.g. 'tcp' + - `callback`: a function to be called with a list of received + addresses + :Types: + - `domain`: `unicode` + - `service`: `unicode` + - `protocol`: `unicode` + - `callback`: function accepting a single argument + """ + if isinstance(domain, unicode): + domain = domain.encode("idna").decode("us-ascii") + domain = "_{0}._{1}.{2}".format(service, protocol, domain) + try: + records = dns.resolver.query(domain, 'SRV') + except dns.exception.DNSException, err: + logger.warning("Could not resolve {0!r}: {1}" + .format(domain, err.__class__.__name__)) + callback([]) + return + if not records: + callback([]) + return + + result = [] + for record in reorder_srv(records): + hostname = record.target.to_text() + if hostname in (".", ""): + continue + result.append((hostname, record.port)) + + if not result: + callback([(".", 0)]) + else: + callback(result) + return + + def resolve_address(self, hostname, callback, allow_cname = True): + """Start looking up an A or AAAA record. + + `callback` will be called with a list of (family, address) tuples + (each holiding socket.AF_* and IPv4 or IPv6 address literal) on + success. The list will be empty on error. + + :Parameters: + - `hostname`: the host name to look up + - `callback`: a function to be called with a list of received + addresses + - `allow_cname`: `True` if CNAMEs should be followed + :Types: + - `hostname`: `unicode` + - `callback`: function accepting a single argument + - `allow_cname`: `bool` + """ + if isinstance(hostname, unicode): + hostname = hostname.encode("idna").decode("us-ascii") + rtypes = [] + if self.settings["ipv6"]: + rtypes.append(("AAAA", socket.AF_INET6)) + if self.settings["ipv4"]: + rtypes.append(("A", socket.AF_INET)) + if not self.settings["prefer_ipv6"]: + rtypes.reverse() + exception = None + result = [] + for rtype, rfamily in rtypes: + try: + try: + records = dns.resolver.query(hostname, rtype) + except dns.exception.DNSException: + records = dns.resolver.query(hostname + ".", rtype) + except dns.exception.DNSException, err: + exception = err + continue + if not allow_cname and records.rrset.name != dns.name.from_text( + hostname): + logger.warning("Unexpected CNAME record found for {0!r}" + .format(hostname)) + continue + if records: + for record in records: + result.append((rfamily, record.to_text())) + + if not result and exception: + logger.warning("Could not resolve {0!r}: {1}".format(hostname, + exception.__class__.__name__)) + callback(result) + +class ThreadedResolver(): + """Base class for threaded resolvers. + + Starts worker threads, each running a blocking resolver implementation + and communicates with them to provide non-blocking asynchronous API. + """ + def __init__(self, settings = None, max_threads = 1): + if settings: + self.settings = settings + else: + self.settings = DEFAULT_SETTINGS + self.threads = [] + self.queue = Queue.Queue() + self.lock = threading.RLock() + self.max_threads = max_threads + self.last_thread_n = 0 + +def _make_resolver(self): + """Threaded resolver implementation using the DNSPython + :dns:`dns.resolver` module. + """ + return BlockingResolver(self.settings) + + def stop(self): + """Stop the resolver threads. + """ + with self.lock: + for dummy in self.threads: + self.queue.put(None) + + def _start_thread(self): + """Start a new working thread unless the maximum number of threads + has been reached or the request queue is empty. + """ + with self.lock: + if self.threads and self.queue.empty(): + return + if len(self.threads) >= self.max_threads: + return + thread_n = self.last_thread_n + 1 + self.last_thread_n = thread_n + thread = threading.Thread(target = self._run, + name = "{0!r} #{1}".format(self, thread_n), + args = (thread_n,)) + self.threads.append(thread) + thread.daemon = True + thread.start() + + def resolve_address(self, hostname, callback, allow_cname = True): + request = ("resolve_address", (hostname, callback, allow_cname)) + self._start_thread() + self.queue.put(request) + + def resolve_srv(self, domain, service, protocol, callback): + request = ("resolve_srv", (domain, service, protocol, callback)) + self._start_thread() + self.queue.put(request) + + def _run(self, thread_n): + """The thread function.""" + try: + logger.debug("{0!r}: entering thread #{1}" + .format(self, thread_n)) + resolver = self._make_resolver() + while True: + request = self.queue.get() + if request is None: + break + method, args = request + logger.debug(" calling {0!r}.{1}{2!r}" + .format(resolver, method, args)) + getattr(resolver, method)(*args) # pylint: disable=W0142 + self.queue.task_done() + logger.debug("{0!r}: leaving thread #{1}" + .format(self, thread_n)) + finally: + self.threads.remove(threading.currentThread()) + +# vi: sts=4 et sw=4 diff --git a/toys/brhute/twisted_http.py b/toys/brhute/twisted_http.py new file mode 100644 index 0000000..805c78a --- /dev/null +++ b/toys/brhute/twisted_http.py @@ -0,0 +1,26 @@ +from twisted.web import client +from twisted.internet import reactor, defer + +urls = [ + 'http://www.python.org', + 'http://stackoverflow.com', + 'http://www.twistedmatrix.com', + 'http://www.google.com', + 'http://www.google.com/toto', + 'http://www.google.com/titi', + 'http://www.google.com/tata', + 'http://launchpad.net', + 'http://github.com', + 'http://bitbucket.org', +] + +def finish(results): + for result in results: + print 'GOT PAGE', len(result), 'bytes' + reactor.stop() + +factory = client.HTTPClientFactory() +waiting = [client.getPage(url, factory) for url in urls] +defer.gatherResults(waiting).addCallback(finish) + +reactor.run() diff --git a/toys/brhute/twisted_http_persistent.py b/toys/brhute/twisted_http_persistent.py new file mode 100644 index 0000000..333bcb3 --- /dev/null +++ b/toys/brhute/twisted_http_persistent.py @@ -0,0 +1,39 @@ +from twisted.internet import reactor +from twisted.internet.defer import Deferred, DeferredList +from twisted.internet.protocol import Protocol +from twisted.web.client import Agent, HTTPConnectionPool + +class IgnoreBody(Protocol): + def __init__(self, deferred): + self.deferred = deferred + + def dataReceived(self, bytes): + pass + + def connectionLost(self, reason): + self.deferred.callback(None) + + +def cbRequest(response): + print 'Response code:', response.code + finished = Deferred() + response.deliverBody(IgnoreBody(finished)) + return finished + +pool = HTTPConnectionPool(reactor) +agent = Agent(reactor, pool=pool) + +def requestGet(url): + d = agent.request('GET', url) + d.addCallback(cbRequest) + return d + +# Two requests to the same host: +d = requestGet('http://google.com/titi').addCallback( + lambda ign: requestGet("http://google.com/tata")) +def cbShutdown(ignored): + reactor.stop() +d.addCallback(cbShutdown) + +reactor.run() + diff --git a/toys/brhute/twisted_http_simultaneous.py b/toys/brhute/twisted_http_simultaneous.py new file mode 100644 index 0000000..b9de196 --- /dev/null +++ b/toys/brhute/twisted_http_simultaneous.py @@ -0,0 +1,39 @@ +from twisted.internet import reactor +from twisted.internet.defer import Deferred, DeferredList +from twisted.internet.protocol import Protocol +from twisted.web.client import Agent, HTTPConnectionPool + +class IgnoreBody(Protocol): + def __init__(self, deferred): + self.deferred = deferred + + def dataReceived(self, bytes): + pass + + def connectionLost(self, reason): + self.deferred.callback(None) + + +def cbRequest(response): + print 'Response code:', response.code + finished = Deferred() + response.deliverBody(IgnoreBody(finished)) + return finished + +pool = HTTPConnectionPool(reactor, persistent=True) +pool.maxPersistentPerHost = 1 +agent = Agent(reactor, pool=pool) + +def requestGet(url): + d = agent.request('GET', url) + d.addCallback(cbRequest) + return d + +# Two requests to the same host: +requestGet('http://google.com/titi') +requestGet("http://google.com/tata") +requestGet("http://google.com/toto") +requestGet("http://google.com/tralala") + +reactor.run() + diff --git a/toys/brhute_multitprocessing_broken.py b/toys/brhute_multitprocessing_broken.py deleted file mode 100644 index fb7f19d..0000000 --- a/toys/brhute_multitprocessing_broken.py +++ /dev/null @@ -1,121 +0,0 @@ -from collections import deque -import time -import threading -import Queue -import asyncore -from asynhttp import http_evented # in brhute repository -import asyncdns # sudo pip install asyncdns -import warnings - -# grbrute - asynchronous URL fetcher based on asyhttp -# Uses multiple simultaneous connections and multiple requests per connections -# 2013, Laurent Ghigonis - -# Python grequests ressources : -# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous -# https://github.com/kennethreitz/grequests/issues/13 -# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e -# https://gist.github.com/ibrahima/3153647 - request_queue.py -# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus - -# XXX multiple processes, autodetect and repartir connections -# DNS resolving with asyncdns - -class Brhute_connection(): - def __init__(self, queue, ip, port, req_per_connection, cb_response, - interval=0, verbose=False): - self.queue = queue - self.ip = ip - self.port = port - self.req_per_connection = req_per_connection - self.cb_response_user = cb_response - self.interval = interval - self.verbose = verbose - self.ongoing = 0 - self.hev = http_evented.http_evented((ip, port), onConnected=self._connected) - asyncore.loop() - - def get(self, host, url): - if self.verbose: - print "XXX Brhute_connection.get" - headers = {'Host': host} - body = None - self.hev.make_HTTP_request("GET", url, body, headers, - self._cb_response) - self.ongoing += 1 - - def _connected(self): - self._send() - - def _send(self): - if self.ongoing == self.req_per_connection: - return - # get an URL to send - try: - print "XXX queue get" - try: - host, url = self.queue.get(False) - except Queue.Empty: - return - except StopIteration, e: - return - if self.verbose: - print "[-] %s" % url - # send the url - self.get(host, url) - self.queue.task_done() - - def _cb_response(self, response): - self.ongoing -= 1 - if self.cb_response_user: - self.cb_response_user(response) - self._send() - time.sleep(self.interval) - -class Brhute_ip: - """ Fetch URLs from one IP - url_iter is the iterator that provides the URLs. - cb_response should return True for the processing to continue, and False - to terminate. - If you want to integrate it in a gevent driven program, use block=False""" - def __init__(self, url_iter, ip, port=80, cb_response=None, - nb_connections=3, req_per_connection=10, interval=0, - verbose=False, block=True): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't expect this to work") - self.url_iter = url_iter - self.ip = ip - self.port = port - self.cb_response_user = cb_response - self.nb_connections = nb_connections - self.req_per_connection = req_per_connection - self.interval = interval - self.verbose = verbose - queue = multiprocessing.JoinableQueue() - - self.conns = deque() - for i in range(nb_connections): - p = multiprocessing.Process(target=self._proc, - args=(queue, ip, port, - req_per_connection, cb_response, - interval, verbose)) - p.start() - self.conns.append(p) - for host, url in url_iter: - queue.put((host, url)) - time.sleep(60) # XXX - - def _proc(self, queue, ip, port, req_per_connection, cb_response, interval, verbose): - Brhute_connection(queue, ip, port, req_per_connection, cb_response, interval, verbose) - -class Brhute_multi_ip: - """Fetch URLs from multiple IPs pointing to the same content""" - def __init__(self): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't excpect this to work") - -class Brhute: - """Fetch URLs""" - def __init__(self): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute_threaded.py b/toys/brhute_threaded.py deleted file mode 100644 index 22ab2bb..0000000 --- a/toys/brhute_threaded.py +++ /dev/null @@ -1,75 +0,0 @@ -from collections import deque -import time -import httplib_pipelining -import threading -import threaded_resolver -import Queue -import warnings - -# grbrute - asynchronous URL fetcher using threads and HTTP pipelining -# Makes multiple simultaneous connections and multiple requests per connections -# 2013, Laurent Ghigonis - -# XXX multiple processes, autodetect and repartir connections -# DNS resolving with asyncdns - -class Brhute_connection(threading.Thread): - def __init__(self, ip, port, queue, req_per_connection, cb_response, - interval=0, verbose=False): - threading.Thread.__init__(self) - self.queue = queue - self.ip = ip - self.port = port - self.req_per_connection = req_per_connection - self.cb_response_user = cb_response - self.interval = interval - self.verbose = verbose - - def run(self): - conn = httplib_pipelining.HTTP_pipeline(self.ip, self.queue, self.cb_response_user) - conn.run() - -class Brhute_ip: - """ Fetch URLs from one IP - url_iter is the iterator that provides the URLs. - cb_response should return True for the processing to continue, and False - to terminate. - If you want to integrate it in a gevent driven program, use block=False""" - def __init__(self, url_iter, ip, port=80, cb_response=None, - nb_connections=3, req_per_connection=10, interval=0, - verbose=False, block=True): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't expect this to work") - self.url_iter = url_iter - self.ip = ip - self.port = port - self.cb_response_user = cb_response - self.nb_connections = nb_connections - self.req_per_connection = req_per_connection - self.interval = interval - self.verbose = verbose - - queue = Queue.Queue() - - for i in range(nb_connections): - c = Brhute_connection(ip, port, queue, - req_per_connection, cb_response, - interval, verbose) - c.setDaemon(True) - c.start() - - for host, url in url_iter: - queue.put(url) - queue.join() - -class Brhute_multi_ip: - """Fetch URLs from multiple IPs pointing to the same content""" - def __init__(self): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't excpect this to work") - -class Brhute: - """Fetch URLs""" - def __init__(self): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/brhute_twisted.py b/toys/brhute_twisted.py deleted file mode 100644 index 22ab2bb..0000000 --- a/toys/brhute_twisted.py +++ /dev/null @@ -1,75 +0,0 @@ -from collections import deque -import time -import httplib_pipelining -import threading -import threaded_resolver -import Queue -import warnings - -# grbrute - asynchronous URL fetcher using threads and HTTP pipelining -# Makes multiple simultaneous connections and multiple requests per connections -# 2013, Laurent Ghigonis - -# XXX multiple processes, autodetect and repartir connections -# DNS resolving with asyncdns - -class Brhute_connection(threading.Thread): - def __init__(self, ip, port, queue, req_per_connection, cb_response, - interval=0, verbose=False): - threading.Thread.__init__(self) - self.queue = queue - self.ip = ip - self.port = port - self.req_per_connection = req_per_connection - self.cb_response_user = cb_response - self.interval = interval - self.verbose = verbose - - def run(self): - conn = httplib_pipelining.HTTP_pipeline(self.ip, self.queue, self.cb_response_user) - conn.run() - -class Brhute_ip: - """ Fetch URLs from one IP - url_iter is the iterator that provides the URLs. - cb_response should return True for the processing to continue, and False - to terminate. - If you want to integrate it in a gevent driven program, use block=False""" - def __init__(self, url_iter, ip, port=80, cb_response=None, - nb_connections=3, req_per_connection=10, interval=0, - verbose=False, block=True): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't expect this to work") - self.url_iter = url_iter - self.ip = ip - self.port = port - self.cb_response_user = cb_response - self.nb_connections = nb_connections - self.req_per_connection = req_per_connection - self.interval = interval - self.verbose = verbose - - queue = Queue.Queue() - - for i in range(nb_connections): - c = Brhute_connection(ip, port, queue, - req_per_connection, cb_response, - interval, verbose) - c.setDaemon(True) - c.start() - - for host, url in url_iter: - queue.put(url) - queue.join() - -class Brhute_multi_ip: - """Fetch URLs from multiple IPs pointing to the same content""" - def __init__(self): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't excpect this to work") - -class Brhute: - """Fetch URLs""" - def __init__(self): - warnings.warn("XXX WARNING: WORK IN PROGRESS") - warnings.warn("XXX WARNING: Don't excpect this to work") diff --git a/toys/grbrute.py b/toys/grbrute.py deleted file mode 100644 index fbdc8bc..0000000 --- a/toys/grbrute.py +++ /dev/null @@ -1,90 +0,0 @@ -import requests -import grequests -import gevent -from collections import deque -import time -import warnings - -# grbrute - asynchronous URL fetcher based on grequests -# Uses multiple simultaneous connections and reuses them (HTTP/1.1) -# 2013, Laurent Ghigonis - -# XXX urllib3 and therefore requests do not support pipelining ... - -# Python grequests ressources : -# http://stackoverflow.com/questions/16015749/in-what-way-is-grequests-asynchronous -# https://github.com/kennethreitz/grequests/issues/13 -# http://stackoverflow.com/questions/13809650/using-grequests-to-send-a-pool-of-requests-how-can-i-get-the-response-time-of-e -# https://gist.github.com/ibrahima/3153647 - request_queue.py -# http://rubydoc.info/github/typhoeus/typhoeus/frames/Typhoeus - Ruby Typhoeus - -class SessionQueue: - def __init__(self, pool, cb_response): - self.pool = pool - self.cb_response = cb_response - self.session = requests.Session() - self.ongoing = 0 - - def add(self, url): - req = grequests.get(url, session=self.session, - hooks = {'response' : self._cb_response_session}) - grequests.send(req, self.pool, exception_handler=self._cb_exception) - self.ongoing += 1 - - def _cb_response_session(self, res, verify=None, cert=None, proxies=None, timeout=None, stream=None): - self.ongoing -= 1 - if self.cb_response(res) is False: - self.pool.kill() - - def _cb_exception(self, req, e): - print "ERROR: sending of %s failed, retrying :\n%s" % (req.url, e) - grequests.send(req, self.pool, exception_handler=self._cb_exception) - -class Grbrute: - """ url_iter is the iterator that provides the URLs. - cb_response should return True for the processing to continue, and False - to terminate. - If you want to integrate it in a gevent driven program, use block=False""" - def __init__(self, url_iter, cb_response=None, - nb_sessions=3, req_per_session=10, sleep=0, - verbose=False, block=True): - self.url_iter = url_iter - self.cb_response_user = cb_response - self.nb_sessions = nb_sessions - self.req_per_session = req_per_session - self.sleep = sleep - self.verbose = verbose - self.pool = grequests.Pool() - self.sessions = deque() - self.ongoing_total = 0 - for i in range(nb_sessions): - self.sessions.append(SessionQueue(self.pool, self._cb_response)) - self._send() - if block: - self.pool.join() - - def _send(self): - while self.ongoing_total < self.nb_sessions * self.req_per_session: - # get an URL to send - try: - url = next(self.url_iter) - except StopIteration, e: - return - if self.verbose: - print "[-] %s" % url - # select a session that has room to send - while self.sessions[0].ongoing == self.req_per_session: - self.sessions.rotate(1) - # send URL using selected sessions - self.sessions[0].add(url) - self.ongoing_total += 1 - self.sessions.rotate(1) - - def _cb_response(self, res): - self.ongoing_total -= 1 - cont = True - if self.cb_response_user: - cont = self.cb_response_user(res) - self._send() - time.sleep(self.sleep) - return cont diff --git a/toys/grbrute_profiling/profile_pphidden_async_data.txt b/toys/grbrute_profiling/profile_pphidden_async_data.txt deleted file mode 100644 index cf85bda..0000000 --- a/toys/grbrute_profiling/profile_pphidden_async_data.txt +++ /dev/null @@ -1,1023 +0,0 @@ - ncalls tottime percall cumtime percall filename:lineno(function) - 2/1 0.001 0.000 3.165 3.165 :1() - 1 0.000 0.000 0.000 0.000 :1(ParseResult) - 1 0.000 0.000 0.000 0.000 :1(SplitResult) - 1 0.000 0.000 0.000 0.000 :1(Url) - 612 0.003 0.000 0.004 0.000 :1(fileno) - 2210 0.008 0.000 0.013 0.000 :8(__new__) - 1 0.001 0.001 0.017 0.017 Cookie.py:206() - 1 0.000 0.000 0.000 0.000 Cookie.py:232(CookieError) - 257 0.001 0.000 0.001 0.000 Cookie.py:308() - 1 0.000 0.000 0.000 0.000 Cookie.py:403(Morsel) - 1 0.000 0.000 0.000 0.000 Cookie.py:549(BaseCookie) - 1 0.000 0.000 0.000 0.000 Cookie.py:665(SimpleCookie) - 1 0.000 0.000 0.000 0.000 Cookie.py:679(SerialCookie) - 1 0.000 0.000 0.000 0.000 Cookie.py:705(SmartCookie) - 1 0.001 0.001 0.002 0.002 Queue.py:1() - 320 0.007 0.000 0.016 0.000 Queue.py:107(put) - 1 0.000 0.000 0.000 0.000 Queue.py:13(Full) - 320 0.005 0.000 0.015 0.000 Queue.py:150(get) - 1 0.000 0.000 0.000 0.000 Queue.py:17(Queue) - 1 0.000 0.000 0.000 0.000 Queue.py:212(PriorityQueue) - 3 0.000 0.000 0.000 0.000 Queue.py:22(__init__) - 1 0.000 0.000 0.000 0.000 Queue.py:231(LifoQueue) - 3 0.000 0.000 0.000 0.000 Queue.py:234(_init) - 640 0.002 0.000 0.003 0.000 Queue.py:237(_qsize) - 320 0.001 0.000 0.002 0.000 Queue.py:240(_put) - 320 0.001 0.000 0.002 0.000 Queue.py:243(_get) - 1 0.000 0.000 0.000 0.000 Queue.py:9(Empty) - 1 0.000 0.000 0.000 0.000 StringIO.py:30() - 1 0.000 0.000 0.000 0.000 StringIO.py:42(StringIO) - 643 0.001 0.000 0.001 0.000 UserDict.py:17(__getitem__) - 4492 0.015 0.000 0.021 0.000 UserDict.py:57(get) - 5132 0.008 0.000 0.008 0.000 UserDict.py:69(__contains__) - 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:12() - 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:49(LWPCookieJar) - 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:1() - 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:8(MozillaCookieJar) - 1 0.000 0.000 0.000 0.000 __future__.py:48() - 1 0.000 0.000 0.000 0.000 __future__.py:74(_Feature) - 7 0.000 0.000 0.000 0.000 __future__.py:75(__init__) - 3 0.001 0.000 0.166 0.055 __init__.py:1() - 1 0.000 0.000 0.000 0.000 __init__.py:1001(Logger) - 8 0.000 0.000 0.000 0.000 __init__.py:1016(__init__) - 290 0.001 0.000 0.009 0.000 __init__.py:1034(debug) - 3 0.000 0.000 0.000 0.000 __init__.py:104(CFunctionType) - 30 0.000 0.000 0.002 0.000 __init__.py:1046(info) - 2 0.000 0.000 0.000 0.000 __init__.py:1185(addHandler) - 320 0.008 0.000 0.008 0.000 __init__.py:1230(getEffectiveLevel) - 320 0.002 0.000 0.010 0.000 __init__.py:1244(isEnabledFor) - 1 0.000 0.000 0.000 0.000 __init__.py:1252(RootLogger) - 1 0.000 0.000 0.000 0.000 __init__.py:1258(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:1266(LoggerAdapter) - 7 0.000 0.000 0.003 0.000 __init__.py:1420(getLogger) - 14 0.000 0.000 0.000 0.000 __init__.py:147(_check_size) - 1 0.000 0.000 0.000 0.000 __init__.py:159(py_object) - 1 0.000 0.000 0.000 0.000 __init__.py:168(c_short) - 1 0.000 0.000 0.000 0.000 __init__.py:172(c_ushort) - 1 0.000 0.000 0.000 0.000 __init__.py:176(c_long) - 1 0.000 0.000 0.000 0.000 __init__.py:18() - 1 0.000 0.000 0.000 0.000 __init__.py:180(c_ulong) - 1 0.000 0.000 0.000 0.000 __init__.py:189(c_int) - 1 0.000 0.000 0.000 0.000 __init__.py:193(c_uint) - 9 0.000 0.000 0.000 0.000 __init__.py:194(_acquireLock) - 1 0.000 0.000 0.000 0.000 __init__.py:197(c_float) - 1 0.000 0.000 0.000 0.000 __init__.py:201(c_double) - 9 0.000 0.000 0.000 0.000 __init__.py:203(_releaseLock) - 1 0.000 0.000 0.000 0.000 __init__.py:205(c_longdouble) - 1 0.000 0.000 0.000 0.000 __init__.py:214(LogRecord) - 1 0.000 0.000 0.000 0.000 __init__.py:226(c_ubyte) - 1 0.000 0.000 0.000 0.000 __init__.py:233(c_byte) - 1 0.000 0.000 0.000 0.000 __init__.py:238(c_char) - 1 0.003 0.003 0.005 0.005 __init__.py:24() - 1 0.000 0.000 0.000 0.000 __init__.py:243(c_char_p) - 1 0.000 0.000 0.000 0.000 __init__.py:255(c_void_p) - 1 0.000 0.000 0.000 0.000 __init__.py:260(c_bool) - 1 0.000 0.000 0.000 0.000 __init__.py:275(c_wchar_p) - 1 0.000 0.000 0.000 0.000 __init__.py:278(c_wchar) - 1 0.000 0.000 0.000 0.000 __init__.py:320(CDLL) - 1 0.000 0.000 0.000 0.000 __init__.py:324(Formatter) - 3 0.000 0.000 0.001 0.000 __init__.py:337(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:34(NullHandler) - 3 0.000 0.000 0.000 0.000 __init__.py:347(_FuncPtr) - 4 0.000 0.000 0.000 0.000 __init__.py:363(__getattr__) - 1 0.000 0.000 0.000 0.000 __init__.py:368(__init__) - 4 0.000 0.000 0.000 0.000 __init__.py:370(__getitem__) - 1 0.000 0.000 0.000 0.000 __init__.py:376(PyDLL) - 1 0.004 0.004 0.006 0.006 __init__.py:4() - 1 0.000 0.000 0.000 0.000 __init__.py:416(LibraryLoader) - 2 0.000 0.000 0.000 0.000 __init__.py:417(__init__) - 1 0.001 0.001 0.371 0.371 __init__.py:42() - 1 0.000 0.000 0.000 0.000 __init__.py:462(BufferingFormatter) - 3 0.000 0.000 0.000 0.000 __init__.py:480(PYFUNCTYPE) - 3 0.000 0.000 0.000 0.000 __init__.py:481(CFunctionType) - 5 0.000 0.000 0.000 0.000 __init__.py:49(normalize_encoding) - 1 0.006 0.006 0.009 0.009 __init__.py:5() - 1 0.000 0.000 0.000 0.000 __init__.py:504(Filter) - 1 0.000 0.000 0.000 0.000 __init__.py:541(Filterer) - 10 0.000 0.000 0.000 0.000 __init__.py:546(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:588(Handler) - 2 0.000 0.000 0.000 0.000 __init__.py:597(__init__) - 2 0.000 0.000 0.000 0.000 __init__.py:614(createLock) - 1 0.000 0.000 0.000 0.000 __init__.py:67(NullHandler) - 1 0.000 0.000 0.000 0.000 __init__.py:7(CertificateError) - 2 0.000 0.000 0.017 0.008 __init__.py:71(search_function) - 1 0.000 0.000 0.000 0.000 __init__.py:739(StreamHandler) - 3 0.000 0.000 0.000 0.000 __init__.py:78(CFUNCTYPE) - 1 0.000 0.000 0.000 0.000 __init__.py:806(FileHandler) - 1 0.000 0.000 0.000 0.000 __init__.py:866(PlaceHolder) - 3 0.000 0.000 0.000 0.000 __init__.py:872(__init__) - 10 0.000 0.000 0.000 0.000 __init__.py:879(append) - 1 0.001 0.001 0.165 0.165 __init__.py:9() - 1 0.000 0.000 0.000 0.000 __init__.py:913(Manager) - 1 0.000 0.000 0.000 0.000 __init__.py:918(__init__) - 7 0.000 0.000 0.003 0.000 __init__.py:927(getLogger) - 7 0.002 0.000 0.003 0.000 __init__.py:959(_fixupParents) - 1 0.001 0.001 0.036 0.036 __init__.py:98() - 2 0.000 0.000 0.000 0.000 __init__.py:983(_fixupChildren) - 1 0.000 0.000 0.000 0.000 _abcoll.py:127(__subclasshook__) - 1 0.000 0.000 0.000 0.000 _abcoll.py:24(_hasattr) - 2 0.000 0.000 0.000 0.000 _abcoll.py:26() - 320 0.002 0.000 0.021 0.000 _abcoll.py:334(get) - 1 0.000 0.000 0.000 0.000 _collections.py:22(RecentlyUsedContainer) - 6 0.000 0.000 0.000 0.000 _collections.py:38(__init__) - 320 0.005 0.000 0.019 0.000 _collections.py:45(__getitem__) - 3 0.000 0.000 0.000 0.000 _collections.py:52(__setitem__) - 1 0.000 0.000 0.001 0.001 _collections.py:7() - 1 0.000 0.000 0.000 0.000 _endian.py:22(_swapped_meta) - 1 0.000 0.000 0.000 0.000 _endian.py:4() - 1 0.000 0.000 0.000 0.000 _endian.py:45(BigEndianStructure) - 320 0.002 0.000 0.002 0.000 abc.py:125(__instancecheck__) - 1 0.000 0.000 0.000 0.000 abc.py:145(__subclasscheck__) - 16 0.001 0.000 0.003 0.000 abc.py:83(__new__) - 16 0.000 0.000 0.001 0.000 abc.py:86() - 290 0.014 0.000 0.198 0.001 adapters.py:105(build_response) - 320 0.007 0.000 0.069 0.000 adapters.py:133(get_connection) - 320 0.004 0.000 0.020 0.000 adapters.py:154(request_url) - 320 0.004 0.000 0.011 0.000 adapters.py:169(add_headers) - 320/1 0.016 0.000 3.136 3.136 adapters.py:188(send) - 1 0.000 0.000 0.000 0.000 adapters.py:32(BaseAdapter) - 6 0.000 0.000 0.000 0.000 adapters.py:35(__init__) - 1 0.000 0.000 0.000 0.000 adapters.py:45(HTTPAdapter) - 6 0.000 0.000 0.001 0.000 adapters.py:49(__init__) - 6 0.000 0.000 0.001 0.000 adapters.py:70(init_poolmanager) - 320 0.002 0.000 0.003 0.000 adapters.py:77(cert_verify) - 1 0.000 0.000 0.000 0.000 adapters.py:9() - 1 0.000 0.000 0.003 0.003 api.py:12() - 1 0.000 0.000 0.000 0.000 argparse.py:1008(_HelpAction) - 1 0.000 0.000 0.000 0.000 argparse.py:1010(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:1027(_VersionAction) - 1 0.000 0.000 0.000 0.000 argparse.py:1052(_SubParsersAction) - 1 0.000 0.000 0.000 0.000 argparse.py:1054(_ChoicesPseudoAction) - 1 0.000 0.000 0.000 0.000 argparse.py:1124(FileType) - 1 0.000 0.000 0.000 0.000 argparse.py:1167(Namespace) - 1 0.000 0.000 0.000 0.000 argparse.py:1174(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:1188(_ActionsContainer) - 3 0.000 0.000 0.002 0.001 argparse.py:1190(__init__) - 13 0.000 0.000 0.000 0.000 argparse.py:122(_callable) - 34 0.000 0.000 0.000 0.000 argparse.py:1242(register) - 13 0.000 0.000 0.000 0.000 argparse.py:1246(_registry_get) - 5 0.000 0.000 0.001 0.000 argparse.py:1271(add_argument) - 2 0.000 0.000 0.000 0.000 argparse.py:1311(add_argument_group) - 5 0.000 0.000 0.000 0.000 argparse.py:1321(_add_action) - 3 0.000 0.000 0.000 0.000 argparse.py:1385(_get_positional_kwargs) - 2 0.000 0.000 0.000 0.000 argparse.py:1401(_get_optional_kwargs) - 5 0.000 0.000 0.000 0.000 argparse.py:1436(_pop_action_class) - 3 0.000 0.000 0.000 0.000 argparse.py:1440(_get_handler) - 5 0.000 0.000 0.000 0.000 argparse.py:1449(_check_conflict) - 1 0.000 0.000 0.000 0.000 argparse.py:147(_AttributeHolder) - 1 0.000 0.000 0.000 0.000 argparse.py:1485(_ArgumentGroup) - 2 0.000 0.000 0.000 0.000 argparse.py:1487(__init__) - 5 0.000 0.000 0.000 0.000 argparse.py:1508(_add_action) - 1 0.000 0.000 0.000 0.000 argparse.py:1518(_MutuallyExclusiveGroup) - 1 0.000 0.000 0.000 0.000 argparse.py:1538(ArgumentParser) - 1 0.000 0.000 0.005 0.005 argparse.py:1556(__init__) - 5 0.000 0.000 0.000 0.000 argparse.py:1677(_add_action) - 1 0.000 0.000 0.000 0.000 argparse.py:1689(_get_positional_actions) - 1 0.000 0.000 0.002 0.002 argparse.py:1697(parse_args) - 1 0.000 0.000 0.002 0.002 argparse.py:1704(parse_known_args) - 1 0.000 0.000 0.002 0.002 argparse.py:1735(_parse_known_args) - 3 0.000 0.000 0.000 0.000 argparse.py:1782(take_action) - 1 0.000 0.000 0.000 0.000 argparse.py:182(HelpFormatter) - 1 0.000 0.000 0.002 0.002 argparse.py:1880(consume_positionals) - 1 0.000 0.000 0.002 0.002 argparse.py:2021(_match_arguments_partial) - 3 0.000 0.000 0.000 0.000 argparse.py:2037(_parse_optional) - 3 0.000 0.000 0.000 0.000 argparse.py:2138(_get_nargs_pattern) - 3 0.000 0.000 0.000 0.000 argparse.py:2182(_get_values) - 3 0.000 0.000 0.000 0.000 argparse.py:2231(_get_value) - 3 0.000 0.000 0.000 0.000 argparse.py:2256(_check_value) - 1 0.000 0.000 0.000 0.000 argparse.py:230(_Section) - 1 0.000 0.000 0.000 0.000 argparse.py:656(RawDescriptionHelpFormatter) - 1 0.000 0.000 0.000 0.000 argparse.py:667(RawTextHelpFormatter) - 1 0.000 0.000 0.000 0.000 argparse.py:678(ArgumentDefaultsHelpFormatter) - 1 0.000 0.000 0.000 0.000 argparse.py:712(ArgumentError) - 1 0.000 0.000 0.000 0.000 argparse.py:732(ArgumentTypeError) - 1 0.000 0.000 0.000 0.000 argparse.py:741(Action) - 1 0.003 0.003 0.006 0.006 argparse.py:76() - 5 0.000 0.000 0.000 0.000 argparse.py:792(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:832(_StoreAction) - 3 0.000 0.000 0.000 0.000 argparse.py:834(__init__) - 3 0.000 0.000 0.000 0.000 argparse.py:863(__call__) - 1 0.000 0.000 0.000 0.000 argparse.py:867(_StoreConstAction) - 1 0.000 0.000 0.000 0.000 argparse.py:869(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:890(_StoreTrueAction) - 1 0.000 0.000 0.000 0.000 argparse.py:892(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:907(_StoreFalseAction) - 1 0.000 0.000 0.000 0.000 argparse.py:924(_AppendAction) - 1 0.000 0.000 0.000 0.000 argparse.py:961(_AppendConstAction) - 1 0.000 0.000 0.000 0.000 argparse.py:987(_CountAction) - 1 0.000 0.000 0.000 0.000 ascii.py:13(Codec) - 1 0.000 0.000 0.000 0.000 ascii.py:20(IncrementalEncoder) - 1 0.000 0.000 0.000 0.000 ascii.py:24(IncrementalDecoder) - 1 0.000 0.000 0.000 0.000 ascii.py:28(StreamWriter) - 1 0.000 0.000 0.000 0.000 ascii.py:31(StreamReader) - 1 0.000 0.000 0.000 0.000 ascii.py:34(StreamConverter) - 1 0.000 0.000 0.000 0.000 ascii.py:41(getregentry) - 1 0.000 0.000 0.000 0.000 ascii.py:8() - 1 0.000 0.000 0.000 0.000 atexit.py:37(register) - 1 0.000 0.000 0.000 0.000 atexit.py:6() - 1 0.000 0.000 0.000 0.000 auth.py:33(AuthBase) - 1 0.000 0.000 0.000 0.000 auth.py:40(HTTPBasicAuth) - 1 0.000 0.000 0.000 0.000 auth.py:51(HTTPProxyAuth) - 1 0.000 0.000 0.000 0.000 auth.py:58(HTTPDigestAuth) - 1 0.000 0.000 0.001 0.001 auth.py:8() - 1 0.001 0.001 0.001 0.001 base64.py:3() - 1 0.000 0.000 0.000 0.000 bisect.py:1() - 1 0.000 0.000 0.000 0.000 calendar.py:126(Calendar) - 1 0.000 0.000 0.000 0.000 calendar.py:132(__init__) - 1 0.000 0.000 0.000 0.000 calendar.py:138(setfirstweekday) - 1 0.000 0.000 0.000 0.000 calendar.py:21(IllegalMonthError) - 1 0.000 0.000 0.000 0.000 calendar.py:255(TextCalendar) - 1 0.000 0.000 0.000 0.000 calendar.py:28(IllegalWeekdayError) - 1 0.000 0.000 0.000 0.000 calendar.py:372(HTMLCalendar) - 1 0.000 0.000 0.000 0.000 calendar.py:47(_localized_month) - 1 0.000 0.000 0.000 0.000 calendar.py:484(TimeEncoding) - 1 0.000 0.000 0.000 0.000 calendar.py:496(LocaleTextCalendar) - 2 0.000 0.000 0.000 0.000 calendar.py:52(__init__) - 1 0.000 0.000 0.000 0.000 calendar.py:531(LocaleHTMLCalendar) - 1 0.002 0.002 0.002 0.002 calendar.py:6() - 1 0.000 0.000 0.000 0.000 calendar.py:66(_localized_day) - 2 0.000 0.000 0.000 0.000 calendar.py:71(__init__) - 1 0.000 0.000 0.000 0.000 certs.py:13() - 1 0.000 0.000 0.000 0.000 certs.py:18(where) - 1 0.012 0.012 0.044 0.044 cgi.py:16() - 869 0.006 0.000 0.009 0.000 cgi.py:292(_parseparam) - 290 0.009 0.000 0.019 0.000 cgi.py:304(parse_header) - 1 0.000 0.000 0.000 0.000 cgi.py:328(MiniFieldStorage) - 1 0.000 0.000 0.000 0.000 cgi.py:353(FieldStorage) - 1 0.000 0.000 0.000 0.000 cgi.py:775(FormContentDict) - 1 0.000 0.000 0.000 0.000 cgi.py:795(SvFormContentDict) - 1 0.000 0.000 0.000 0.000 cgi.py:829(InterpFormContentDict) - 1 0.000 0.000 0.000 0.000 cgi.py:857(FormContent) - 2 0.000 0.000 0.000 0.000 codecs.py:77(__new__) - 1 0.001 0.001 0.001 0.001 collections.py:1() - 3 0.004 0.001 0.005 0.002 collections.py:13(namedtuple) - 145 0.000 0.000 0.000 0.000 collections.py:43() - 21 0.000 0.000 0.000 0.000 collections.py:60() - 21 0.000 0.000 0.000 0.000 collections.py:61() - 1 0.007 0.007 0.285 0.285 compat.py:5() - 1 0.000 0.000 0.000 0.000 connectionpool.py:112(ConnectionPool) - 3 0.000 0.000 0.000 0.000 connectionpool.py:121(__init__) - 1 0.000 0.000 0.000 0.000 connectionpool.py:130(HTTPConnectionPool) - 3 0.000 0.000 0.002 0.001 connectionpool.py:171(__init__) - 30 0.001 0.000 0.003 0.000 connectionpool.py:189(_new_conn) - 320 0.010 0.000 0.041 0.000 connectionpool.py:200(_get_conn) - 290 0.002 0.000 0.017 0.000 connectionpool.py:233(_put_conn) - 320/1 0.016 0.000 3.136 3.136 connectionpool.py:261(_make_request) - 320/1 0.019 0.000 3.136 3.136 connectionpool.py:325(urlopen) - 1 0.000 0.000 0.000 0.000 connectionpool.py:497(HTTPSConnectionPool) - 1 0.007 0.007 0.162 0.162 connectionpool.py:7() - 1 0.000 0.000 0.000 0.000 connectionpool.py:74(VerifiedHTTPSConnection) - 2060 0.015 0.000 0.037 0.000 cookielib.py:1175(vals_sorted_by_key) - 2060 0.007 0.000 0.044 0.000 cookielib.py:1180(deepvalues) - 1 0.000 0.000 0.000 0.000 cookielib.py:1199(Absent) - 1 0.000 0.000 0.002 0.002 cookielib.py:1201(CookieJar) - 1208 0.021 0.000 0.058 0.000 cookielib.py:1217(__init__) - 320 0.002 0.000 0.002 0.000 cookielib.py:1246(_cookies_for_request) - 320 0.002 0.000 0.004 0.000 cookielib.py:1253(_cookie_attrs) - 320 0.012 0.000 0.051 0.000 cookielib.py:1312(add_cookie_header) - 290 0.004 0.000 0.035 0.000 cookielib.py:1555(make_cookies) - 290 0.009 0.000 0.057 0.000 cookielib.py:1635(extract_cookies) - 320 0.005 0.000 0.022 0.000 cookielib.py:1691(clear_expired_cookies) - 2060 0.008 0.000 0.008 0.000 cookielib.py:1710(__iter__) - 1 0.000 0.000 0.000 0.000 cookielib.py:1731(LoadError) - 1 0.000 0.000 0.000 0.000 cookielib.py:1733(FileCookieJar) - 1 0.003 0.003 0.053 0.053 cookielib.py:26() - 610 0.001 0.000 0.001 0.000 cookielib.py:43(_debug) - 1 0.000 0.000 0.000 0.000 cookielib.py:707(Cookie) - 1 0.000 0.000 0.000 0.000 cookielib.py:805(CookiePolicy) - 1 0.000 0.000 0.000 0.000 cookielib.py:838(DefaultCookiePolicy) - 1208 0.007 0.000 0.007 0.000 cookielib.py:848(__init__) - 320 0.005 0.000 0.091 0.000 cookies.py:108(get_cookie_header) - 1 0.000 0.000 0.000 0.000 cookies.py:131(CookieConflictError) - 1 0.000 0.000 0.000 0.000 cookies.py:136(RequestsCookieJar) - 1 0.000 0.000 0.000 0.000 cookies.py:20(MockRequest) - 1740 0.016 0.000 0.069 0.000 cookies.py:257(update) - 320 0.002 0.000 0.042 0.000 cookies.py:309(copy) - 610 0.008 0.000 0.065 0.000 cookies.py:32(__init__) - 888 0.015 0.000 0.055 0.000 cookies.py:374(cookiejar_from_dict) - 320 0.000 0.000 0.000 0.000 cookies.py:65(get_new_headers) - 1 0.000 0.000 0.001 0.001 cookies.py:7() - 1 0.000 0.000 0.000 0.000 cookies.py:73(MockResponse) - 290 0.001 0.000 0.001 0.000 cookies.py:80(__init__) - 580 0.001 0.000 0.001 0.000 cookies.py:87(info) - 290 0.005 0.000 0.094 0.000 cookies.py:94(extract_cookies_to_jar) - 1 0.001 0.001 0.031 0.031 decoder.py:2() - 1 0.000 0.000 0.007 0.007 decoder.py:244(JSONDecoder) - 1 0.000 0.000 0.000 0.000 decoder.py:276(__init__) - 1 0.000 0.000 0.000 0.000 dns.py:27(DNSError) - 30/1 0.000 0.000 0.000 0.000 dns.py:46(resolve_ipv4) - 1 0.000 0.000 0.000 0.000 dns.py:7() - 1 0.000 0.000 0.000 0.000 encoder.py:119(__init__) - 1 0.000 0.000 0.004 0.004 encoder.py:2() - 1 0.000 0.000 0.000 0.000 encoder.py:87(JSONEncoder) - 1 0.001 0.001 0.001 0.001 exceptions.py:10() - 1 0.000 0.000 0.000 0.000 exceptions.py:10(HTTPError) - 1 0.000 0.000 0.000 0.000 exceptions.py:12(RequestException) - 1 0.000 0.000 0.000 0.000 exceptions.py:15(PoolError) - 1 0.000 0.000 0.000 0.000 exceptions.py:17(HTTPError) - 1 0.000 0.000 0.000 0.000 exceptions.py:26(ConnectionError) - 1 0.000 0.000 0.000 0.000 exceptions.py:26(SSLError) - 1 0.000 0.000 0.000 0.000 exceptions.py:30(SSLError) - 1 0.000 0.000 0.000 0.000 exceptions.py:31(DecodeError) - 1 0.000 0.000 0.000 0.000 exceptions.py:34(Timeout) - 1 0.000 0.000 0.000 0.000 exceptions.py:38(MaxRetryError) - 1 0.000 0.000 0.000 0.000 exceptions.py:38(URLRequired) - 1 0.000 0.000 0.000 0.000 exceptions.py:42(TooManyRedirects) - 1 0.000 0.000 0.000 0.000 exceptions.py:46(MissingSchema) - 1 0.000 0.000 0.000 0.000 exceptions.py:50(InvalidSchema) - 1 0.000 0.000 0.000 0.000 exceptions.py:54(HostChangedError) - 1 0.000 0.000 0.000 0.000 exceptions.py:54(InvalidURL) - 1 0.000 0.000 0.000 0.000 exceptions.py:65(TimeoutError) - 1 0.000 0.000 0.000 0.000 exceptions.py:70(EmptyPoolError) - 1 0.000 0.000 0.000 0.000 exceptions.py:75(ClosedPoolError) - 1 0.000 0.000 0.000 0.000 exceptions.py:80(LocationParseError) - 1 0.001 0.001 0.001 0.001 exceptions.py:9() - 1 0.005 0.005 0.133 0.133 filepost.py:7() - 652 0.010 0.000 0.021 0.000 genericpath.py:15(exists) - 6 0.000 0.000 0.001 0.000 gettext.py:130(_expand_lang) - 3 0.000 0.000 0.002 0.001 gettext.py:421(find) - 3 0.000 0.000 0.002 0.001 gettext.py:461(translation) - 3 0.001 0.000 0.002 0.001 gettext.py:527(dgettext) - 3 0.000 0.000 0.002 0.001 gettext.py:565(gettext) - 1 0.001 0.001 0.401 0.401 grbrute.py:1() - 1 0.000 0.000 0.000 0.000 grbrute.py:20(SessionQueue) - 3 0.000 0.000 0.002 0.001 grbrute.py:21(__init__) - 320 0.007 0.000 0.061 0.000 grbrute.py:27(add) - 290/1 0.013 0.000 3.133 3.133 grbrute.py:33(_cb_response_session) - 1 0.000 0.000 0.000 0.000 grbrute.py:42(Grbrute) - 2/1 0.000 0.000 3.163 3.163 grbrute.py:47(__init__) - 291 0.010 0.000 0.082 0.000 grbrute.py:65(_send) - 290/1 0.010 0.000 3.133 3.133 grbrute.py:82(_cb_response) - 1 0.000 0.000 0.000 0.000 greenlet.py:114(SuccessGreenletLink) - 1 0.000 0.000 0.000 0.000 greenlet.py:127(FailureGreenletLink) - 1 0.000 0.000 0.000 0.000 greenlet.py:140(Greenlet) - 320 0.008 0.000 0.009 0.000 greenlet.py:146(__init__) - 1 0.000 0.000 0.000 0.000 greenlet.py:16(SpawnedLink) - 933 0.002 0.000 0.002 0.000 greenlet.py:160(ready) - 320 0.001 0.000 0.001 0.000 greenlet.py:164(successful) - 55 0.011 0.000 89.067 1.619 greenlet.py:202(throw) - 320 0.001 0.000 0.001 0.000 greenlet.py:23(__init__) - 320 0.003 0.000 0.003 0.000 greenlet.py:236(start) - 60 0.000 0.000 0.000 0.000 greenlet.py:284(kill) - 1 0.001 0.001 0.003 0.003 greenlet.py:3() - 320 0.001 0.000 0.002 0.000 greenlet.py:30(__hash__) - 320 0.006 0.000 0.006 0.000 greenlet.py:361(_report_result) - 320/1 0.018 0.000 3.158 3.158 greenlet.py:384(run) - 933 0.007 0.000 0.014 0.000 greenlet.py:400(rawlink) - 320 0.004 0.000 0.011 0.000 greenlet.py:411(link) - 320 0.001 0.000 0.012 0.000 greenlet.py:455(link_exception) - 320 0.007 0.000 0.018 0.000 greenlet.py:459(_notify_links) - 1 0.000 0.000 0.000 0.000 greenlet.py:47(SuccessSpawnedLink) - 55 0.001 0.000 89.072 1.619 greenlet.py:475(_kill) - 7 0.006 0.001 3.174 0.453 greenlet.py:480(joinall) - 1 0.000 0.000 0.000 0.000 greenlet.py:540(LinkedExited) - 1 0.000 0.000 0.000 0.000 greenlet.py:544(LinkedCompleted) - 1 0.000 0.000 0.000 0.000 greenlet.py:555(LinkedKilled) - 1 0.000 0.000 0.000 0.000 greenlet.py:568(LinkedFailed) - 1 0.000 0.000 0.000 0.000 greenlet.py:59(FailureSpawnedLink) - 320 0.001 0.000 0.002 0.000 greenlet.py:66(__call__) - 1 0.000 0.000 0.000 0.000 greenlet.py:71(GreenletLink) - 320 0.004 0.000 0.050 0.000 grequests.py:112(send) - 1 0.004 0.004 0.029 0.029 grequests.py:14() - 1 0.000 0.000 0.000 0.000 grequests.py:69(AsyncRequest) - 320 0.003 0.000 0.004 0.000 grequests.py:78(__init__) - 320/1 0.016 0.000 3.137 3.137 grequests.py:97(send) - 1 0.000 0.000 0.000 0.000 gzip.py:35(GzipFile) - 1 0.000 0.000 0.000 0.000 gzip.py:4() - 10 0.000 0.000 0.000 0.000 hashlib.py:109() - 1 0.001 0.001 0.001 0.001 hashlib.py:55() - 1 0.001 0.001 0.001 0.001 heapq.py:31() - 1 0.000 0.000 0.000 0.000 hooks.py:14() - 918 0.002 0.000 0.002 0.000 hooks.py:20(default_hooks) - 290/1 0.010 0.000 3.135 3.135 hooks.py:29(dispatch_hook) - 1 0.000 0.000 0.000 0.000 httplib.py:1004(HTTP) - 1 0.000 0.000 0.000 0.000 httplib.py:1098(HTTPSConnection) - 1 0.000 0.000 0.000 0.000 httplib.py:1120(HTTPS) - 1 0.000 0.000 0.000 0.000 httplib.py:1153(HTTPException) - 1 0.000 0.000 0.000 0.000 httplib.py:1158(NotConnected) - 1 0.000 0.000 0.000 0.000 httplib.py:1161(InvalidURL) - 1 0.000 0.000 0.000 0.000 httplib.py:1164(UnknownProtocol) - 1 0.000 0.000 0.000 0.000 httplib.py:1169(UnknownTransferEncoding) - 1 0.000 0.000 0.000 0.000 httplib.py:1172(UnimplementedFileMode) - 1 0.000 0.000 0.000 0.000 httplib.py:1175(IncompleteRead) - 1 0.000 0.000 0.000 0.000 httplib.py:1189(ImproperConnectionState) - 1 0.000 0.000 0.000 0.000 httplib.py:1192(CannotSendRequest) - 1 0.000 0.000 0.000 0.000 httplib.py:1195(CannotSendHeader) - 1 0.000 0.000 0.000 0.000 httplib.py:1198(ResponseNotReady) - 1 0.000 0.000 0.000 0.000 httplib.py:1201(BadStatusLine) - 1 0.000 0.000 0.000 0.000 httplib.py:1209(LineAndFileWrapper) - 1 0.000 0.000 0.000 0.000 httplib.py:214(HTTPMessage) - 1742 0.008 0.000 0.010 0.000 httplib.py:216(addheader) - 290 0.065 0.000 0.924 0.003 httplib.py:230(readheaders) - 1 0.000 0.000 0.000 0.000 httplib.py:319(HTTPResponse) - 320 0.004 0.000 0.024 0.000 httplib.py:329(__init__) - 320/1 0.011 0.000 3.136 3.136 httplib.py:347(_read_status) - 320/1 0.027 0.000 3.136 3.136 httplib.py:384(begin) - 290 0.002 0.000 0.007 0.000 httplib.py:467(_check_close) - 580 0.005 0.000 0.010 0.000 httplib.py:497(close) - 875 0.001 0.000 0.001 0.000 httplib.py:502(isclosed) - 585/537 0.005 0.000 0.033 0.000 httplib.py:513(read) - 290 0.004 0.000 0.006 0.000 httplib.py:631(getheaders) - 1 0.000 0.000 0.000 0.000 httplib.py:638(HTTPConnection) - 30 0.000 0.000 0.000 0.000 httplib.py:649(__init__) - 1 0.002 0.002 0.002 0.002 httplib.py:67() - 30 0.000 0.000 0.000 0.000 httplib.py:678(_set_hostport) - 30/1 0.000 0.000 0.000 0.000 httplib.py:717(connect) - 320/291 0.006 0.000 0.033 0.000 httplib.py:735(send) - 1600 0.005 0.000 0.006 0.000 httplib.py:765(_output) - 320/291 0.004 0.000 0.037 0.000 httplib.py:772(_send_output) - 320 0.015 0.000 0.023 0.000 httplib.py:782(putrequest) - 1280 0.007 0.000 0.011 0.000 httplib.py:889(putheader) - 320/291 0.003 0.000 0.180 0.001 httplib.py:900(endheaders) - 320/291 0.002 0.000 0.224 0.001 httplib.py:910(request) - 320/291 0.011 0.000 0.223 0.001 httplib.py:922(_send_request) - 320/1 0.016 0.000 3.136 3.136 httplib.py:956(getresponse) - 1064 0.003 0.000 0.003 0.000 hub.py:115(get_hub) - 1 0.000 0.000 0.000 0.000 hub.py:132(Hub) - 1 0.000 0.000 0.000 0.000 hub.py:138(__init__) - 693/2 0.025 0.000 0.000 0.000 hub.py:142(switch) - 1 0.000 0.000 0.000 0.000 hub.py:200(DispatchExit) - 1 0.000 0.000 0.000 0.000 hub.py:207(Waiter) - 106 0.000 0.000 0.000 0.000 hub.py:243(__init__) - 105 0.002 0.000 0.004 0.000 hub.py:270(switch) - 30 0.001 0.000 0.006 0.000 hub.py:282(switch_args) - 51/21 0.002 0.000 0.001 0.000 hub.py:296(get) - 1 0.000 0.000 0.001 0.001 hub.py:3() - 1 0.000 0.000 0.000 0.000 hub.py:317(_NONE) - 290/1 0.010 0.000 0.000 0.000 hub.py:61(sleep) - 1 0.000 0.000 0.000 0.000 hub.py:95(signal) - 1 0.000 0.000 0.000 0.000 idna.py:146(Codec) - 320 0.009 0.000 0.026 0.000 idna.py:147(encode) - 1 0.000 0.000 0.000 0.000 idna.py:197(IncrementalEncoder) - 1 0.000 0.000 0.000 0.000 idna.py:231(IncrementalDecoder) - 1 0.000 0.000 0.000 0.000 idna.py:271(StreamWriter) - 1 0.000 0.000 0.000 0.000 idna.py:274(StreamReader) - 1 0.000 0.000 0.000 0.000 idna.py:279(getregentry) - 1 0.001 0.001 0.016 0.016 idna.py:3() - 960 0.005 0.000 0.009 0.000 idna.py:62(ToASCII) - 1 0.000 0.000 0.000 0.000 io.py:1032(BufferedWriter) - 1 0.000 0.000 0.000 0.000 io.py:1121(BufferedRWPair) - 1 0.000 0.000 0.000 0.000 io.py:1187(BufferedRandom) - 1 0.000 0.000 0.000 0.000 io.py:1255(TextIOBase) - 1 0.000 0.000 0.000 0.000 io.py:1303(IncrementalNewlineDecoder) - 1 0.000 0.000 0.000 0.000 io.py:1379(TextIOWrapper) - 1 0.000 0.000 0.000 0.000 io.py:1880(StringIO) - 1 0.000 0.000 0.000 0.000 io.py:267(_DocDescriptor) - 1 0.000 0.000 0.000 0.000 io.py:276(OpenWrapper) - 1 0.000 0.000 0.000 0.000 io.py:290(UnsupportedOperation) - 1 0.000 0.000 0.000 0.000 io.py:294(IOBase) - 1 0.003 0.003 0.005 0.005 io.py:35() - 1 0.000 0.000 0.000 0.000 io.py:566(RawIOBase) - 1 0.000 0.000 0.000 0.000 io.py:621(FileIO) - 1 0.000 0.000 0.000 0.000 io.py:643(BufferedIOBase) - 1 0.000 0.000 0.000 0.000 io.py:715(_BufferedIOMixin) - 1 0.000 0.000 0.000 0.000 io.py:72(BlockingIOError) - 1 0.000 0.000 0.000 0.000 io.py:789(_BytesIO) - 1 0.000 0.000 0.000 0.000 io.py:900(BytesIO) - 1 0.000 0.000 0.000 0.000 io.py:907(BufferedReader) - 1 0.000 0.000 0.000 0.000 keyword.py:11() - 6 0.000 0.000 0.000 0.000 locale.py:316(normalize) - 1 0.004 0.004 0.009 0.009 mimetools.py:1() - 1 0.000 0.000 0.000 0.000 mimetools.py:20(Message) - 290 0.012 0.000 0.966 0.003 mimetools.py:24(__init__) - 290 0.007 0.000 0.014 0.000 mimetools.py:33(parsetype) - 290 0.007 0.000 0.009 0.000 mimetools.py:50(parseplist) - 1 0.000 0.000 0.002 0.002 mimetypes.py:23() - 1 0.002 0.002 0.002 0.002 mimetypes.py:324(_default_mime_types) - 1 0.000 0.000 0.000 0.000 mimetypes.py:50(MimeTypes) - 1 0.000 0.000 0.000 0.000 models.py:135(RequestHooksMixin) - 320 0.004 0.000 0.011 0.000 models.py:136(register_hook) - 1 0.000 0.000 0.000 0.000 models.py:156(Request) - 320 0.006 0.000 0.007 0.000 models.py:179(__init__) - 320 0.012 0.000 0.364 0.001 models.py:214(prepare) - 1 0.000 0.000 0.000 0.000 models.py:233(PreparedRequest) - 595 0.003 0.000 0.005 0.000 models.py:252(__init__) - 320 0.001 0.000 0.002 0.000 models.py:267(prepare_method) - 320 0.017 0.000 0.154 0.000 models.py:273(prepare_url) - 320 0.010 0.000 0.020 0.000 models.py:323(prepare_headers) - 1280 0.006 0.000 0.010 0.000 models.py:327() - 320 0.006 0.000 0.020 0.000 models.py:332(prepare_body) - 1 0.000 0.000 0.000 0.000 models.py:36(RequestEncodingMixin) - 320 0.004 0.000 0.008 0.000 models.py:37(path_url) - 320 0.002 0.000 0.003 0.000 models.py:389(prepare_content_length) - 320 0.005 0.000 0.019 0.000 models.py:401(prepare_auth) - 320 0.007 0.000 0.121 0.000 models.py:423(prepare_cookies) - 320 0.003 0.000 0.016 0.000 models.py:436(prepare_hooks) - 1 0.000 0.000 0.000 0.000 models.py:442(Response) - 290 0.010 0.000 0.026 0.000 models.py:447(__init__) - 290 0.003 0.000 0.010 0.000 models.py:515(iter_content) - 585/537 0.004 0.000 0.250 0.000 models.py:526(generate) - 290/266 0.004 0.000 0.169 0.001 models.py:567(content) - 320 0.005 0.000 0.020 0.000 models.py:58(_encode_params) - 1 0.001 0.001 0.003 0.003 models.py:8() - 1 0.000 0.000 0.000 0.000 monkey.py:17(patch_time) - 1 0.000 0.000 0.000 0.000 monkey.py:3() - 1 0.001 0.001 0.016 0.016 monkey.py:44(patch_socket) - 1 0.000 0.000 0.000 0.000 monkey.py:61(patch_dns) - 1 0.000 0.000 0.000 0.000 monkey.py:68(patch_ssl) - 1 0.000 0.000 0.000 0.000 monkey.py:8(patch_os) - 1 0.000 0.000 0.016 0.016 monkey.py:95(patch_all) - 1 0.001 0.001 0.001 0.001 netrc.py:1() - 1 0.000 0.000 0.000 0.000 netrc.py:10(NetrcParseError) - 1 0.000 0.000 0.000 0.000 netrc.py:22(netrc) - 640 0.005 0.000 0.007 0.000 ordered_dict.py:117(keys) - 1280 0.006 0.000 0.009 0.000 ordered_dict.py:125(items) - 1926 0.047 0.000 0.075 0.000 ordered_dict.py:143(update) - 1 0.000 0.000 0.000 0.000 ordered_dict.py:17(OrderedDict) - 320 0.004 0.000 0.010 0.000 ordered_dict.py:178(pop) - 640 0.005 0.000 0.044 0.000 ordered_dict.py:221(copy) - 1926 0.045 0.000 0.122 0.000 ordered_dict.py:29(__init__) - 1600 0.022 0.000 0.022 0.000 ordered_dict.py:45(__setitem__) - 317 0.005 0.000 0.006 0.000 ordered_dict.py:55(__delitem__) - 1 0.000 0.000 0.000 0.000 ordered_dict.py:6() - 4480 0.008 0.000 0.008 0.000 ordered_dict.py:64(__iter__) - 1 0.000 0.000 0.000 0.000 os.py:35(_get_exports_list) - 1 0.000 0.000 0.000 0.000 os.py:747(urandom) - 1 0.000 0.000 0.029 0.029 platform.py:10() - 1 0.000 0.000 0.005 0.005 platform.py:1007(_syscmd_uname) - 7 0.000 0.000 0.005 0.001 platform.py:1151(uname) - 4 0.000 0.000 0.005 0.001 platform.py:1288(system) - 3 0.000 0.000 0.000 0.000 platform.py:1307(release) - 6 0.000 0.000 0.000 0.000 platform.py:1364(_sys_version) - 3 0.000 0.000 0.000 0.000 platform.py:1467(python_implementation) - 3 0.000 0.000 0.000 0.000 platform.py:1479(python_version) - 1 0.000 0.000 0.000 0.000 platform.py:390(_popen) - 1 0.000 0.000 0.000 0.000 pool.py:11(GreenletSet) - 1 0.000 0.000 0.000 0.000 pool.py:172(Pool) - 1 0.000 0.000 0.000 0.000 pool.py:174(__init__) - 1 0.000 0.000 0.000 0.000 pool.py:18(__init__) - 320 0.002 0.000 0.020 0.000 pool.py:189(start) - 320 0.005 0.000 0.033 0.000 pool.py:196(spawn) - 320 0.002 0.000 0.005 0.000 pool.py:201(discard) - 1 0.000 0.000 0.001 0.001 pool.py:208(kill) - 1 0.000 0.000 0.000 0.000 pool.py:220(pass_value) - 1 0.000 0.000 0.000 0.000 pool.py:3() - 320 0.003 0.000 0.014 0.000 pool.py:43(add) - 320 0.002 0.000 0.003 0.000 pool.py:47(discard) - 2/1 0.000 0.000 3.163 3.163 pool.py:76(join) - 1 0.000 0.000 0.001 0.001 pool.py:88(kill) - 320 0.004 0.000 0.051 0.000 poolmanager.py:104(connection_from_url) - 1 0.000 0.000 0.000 0.000 poolmanager.py:147(ProxyManager) - 1 0.000 0.000 0.000 0.000 poolmanager.py:27(PoolManager) - 6 0.000 0.000 0.001 0.000 poolmanager.py:55(__init__) - 3 0.000 0.000 0.002 0.001 poolmanager.py:61(_new_pool) - 1 0.000 0.000 0.002 0.002 poolmanager.py:7() - 320 0.003 0.000 0.026 0.000 poolmanager.py:81(connection_from_host) - 1 0.000 0.000 0.000 0.000 posixpath.py:109(basename) - 1 0.000 0.000 0.000 0.000 posixpath.py:117(dirname) - 640 0.012 0.000 0.019 0.000 posixpath.py:248(expanduser) - 1 0.000 0.000 0.000 0.000 posixpath.py:42(normcase) - 13 0.000 0.000 0.000 0.000 posixpath.py:59(join) - 2/1 0.003 0.002 3.163 3.163 pphidden_async.py:1() - 320 0.009 0.000 0.009 0.000 pphidden_async.py:19(next) - 290 0.010 0.000 0.010 0.000 pphidden_async.py:29(cb_response) - 1 0.000 0.000 0.000 0.000 pphidden_async.py:7(Pp_url) - 1 0.000 0.000 0.000 0.000 pphidden_async.py:8(__init__) - 1 0.000 0.000 0.000 0.000 pprint.py:35() - 1 0.000 0.000 0.000 0.000 pprint.py:81(PrettyPrinter) - 293 0.002 0.000 0.007 0.000 queue.py:147(get) - 1 0.001 0.001 0.001 0.001 queue.py:16() - 20 0.001 0.000 0.003 0.000 queue.py:193(_unlock) - 293 0.001 0.000 0.001 0.000 queue.py:229(_schedule_unlock) - 1 0.000 0.000 0.000 0.000 queue.py:235(ItemWaiter) - 1 0.000 0.000 0.000 0.000 queue.py:243(PriorityQueue) - 1 0.000 0.000 0.000 0.000 queue.py:259(LifoQueue) - 1 0.000 0.000 0.000 0.000 queue.py:272(JoinableQueue) - 1 0.000 0.000 0.000 0.000 queue.py:31(Queue) - 7 0.000 0.000 0.000 0.000 queue.py:41(__init__) - 7 0.000 0.000 0.000 0.000 queue.py:53(_init) - 293 0.001 0.000 0.001 0.000 queue.py:56(_get) - 293 0.001 0.000 0.001 0.000 queue.py:59(_put) - 334 0.002 0.000 0.003 0.000 queue.py:80(qsize) - 293 0.002 0.000 0.004 0.000 queue.py:95(put) - 1 0.001 0.001 0.001 0.001 random.py:40() - 1 0.000 0.000 0.000 0.000 random.py:643(WichmannHill) - 1 0.000 0.000 0.000 0.000 random.py:71(Random) - 1 0.000 0.000 0.000 0.000 random.py:793(SystemRandom) - 1 0.000 0.000 0.000 0.000 random.py:90(__init__) - 1 0.000 0.000 0.000 0.000 random.py:99(seed) - 1 0.000 0.000 0.002 0.002 re.py:134(match) - 2 0.000 0.000 0.102 0.051 re.py:139(search) - 54 0.000 0.000 0.125 0.002 re.py:188(compile) - 2 0.000 0.000 0.000 0.000 re.py:206(escape) - 57 0.002 0.000 0.136 0.002 re.py:229(_compile) - 1 0.000 0.000 0.000 0.000 request.py:18(RequestMethods) - 9 0.000 0.000 0.000 0.000 request.py:50(__init__) - 1 0.000 0.000 0.133 0.133 request.py:7() - 585/537 0.015 0.000 0.246 0.000 response.py:112(read) - 290 0.017 0.000 0.035 0.000 response.py:176(from_httplib) - 1 0.000 0.000 0.000 0.000 response.py:32(HTTPResponse) - 290 0.006 0.000 0.008 0.000 response.py:60(__init__) - 1 0.002 0.002 0.003 0.003 response.py:7() - 580 0.004 0.000 0.021 0.000 response.py:96(release_conn) - 1742 0.016 0.000 0.022 0.000 rfc822.py:197(isheader) - 2032 0.003 0.000 0.003 0.000 rfc822.py:209(islast) - 2032 0.003 0.000 0.003 0.000 rfc822.py:219(iscomment) - 580 0.018 0.000 0.028 0.000 rfc822.py:228(getallmatchingheaders) - 1740 0.010 0.000 0.014 0.000 rfc822.py:285(getheader) - 580 0.003 0.000 0.031 0.000 rfc822.py:295(getheaders) - 290 0.001 0.000 0.002 0.000 rfc822.py:454(items) - 1 0.000 0.000 0.000 0.000 rfc822.py:496(AddrlistClass) - 1 0.000 0.000 0.000 0.000 rfc822.py:71() - 1 0.000 0.000 0.000 0.000 rfc822.py:770(AddressList) - 1 0.000 0.000 0.000 0.000 rfc822.py:85(Message) - 290 0.002 0.000 0.926 0.003 rfc822.py:88(__init__) - 1 0.000 0.000 0.000 0.000 scanner.py:17(Scanner) - 2 0.000 0.000 0.023 0.011 scanner.py:18(__init__) - 1 0.000 0.000 0.000 0.000 scanner.py:3() - 5 0.000 0.000 0.000 0.000 scanner.py:64(pattern) - 5 0.000 0.000 0.006 0.001 scanner.py:65(decorator) - 1 0.001 0.001 0.002 0.002 sessions.py:10() - 1 0.000 0.000 0.000 0.000 sessions.py:170(Session) - 3 0.000 0.000 0.002 0.001 sessions.py:188(__init__) - 320/1 0.012 0.000 3.137 3.137 sessions.py:241(request) - 2560 0.021 0.000 0.201 0.000 sessions.py:36(merge_kwargs) - 320/1 0.021 0.000 3.136 3.136 sessions.py:430(send) - 320 0.002 0.000 0.004 0.000 sessions.py:485(get_adapter) - 6 0.000 0.000 0.000 0.000 sessions.py:500(mount) - 320 0.002 0.000 0.006 0.000 sessions.py:59(get_original_key) - 1 0.000 0.000 0.000 0.000 sessions.py:81(SessionRedirectMixin) - 275 0.009 0.000 0.055 0.000 sessions.py:82(resolve_redirects) - 1 0.000 0.000 0.000 0.000 shlex.py:2() - 1 0.000 0.000 0.000 0.000 shlex.py:21(shlex) - 1 0.001 0.001 0.002 0.002 six.py:1() - 1 0.000 0.000 0.000 0.000 six.py:106(MovedAttribute) - 9 0.000 0.000 0.000 0.000 six.py:108(__init__) - 1 0.000 0.000 0.000 0.000 six.py:126(_resolve) - 1 0.000 0.000 0.000 0.000 six.py:132(_MovedItems) - 1 0.000 0.000 0.000 0.000 six.py:247(Iterator) - 1 0.000 0.000 0.000 0.000 six.py:317(exec_) - 1 0.000 0.000 0.000 0.000 six.py:53(X) - 1 0.000 0.000 0.000 0.000 six.py:54(__len__) - 4 0.000 0.000 0.000 0.000 six.py:67(_add_doc) - 1 0.000 0.000 0.000 0.000 six.py:72(_import_module) - 1 0.000 0.000 0.000 0.000 six.py:78(_LazyDescr) - 40 0.000 0.000 0.000 0.000 six.py:80(__init__) - 1 0.000 0.000 0.000 0.000 six.py:83(__get__) - 1 0.000 0.000 0.000 0.000 six.py:91(MovedModule) - 31 0.000 0.000 0.000 0.000 six.py:93(__init__) - 322 0.008 0.000 0.025 0.000 socket.py:128(_wait_helper) - 322/1 0.004 0.000 0.000 0.000 socket.py:136(wait_read) - 30/1 0.000 0.000 0.000 0.000 socket.py:154(wait_readwrite) - 1 0.000 0.000 0.000 0.000 socket.py:164(_closedsocket) - 1 0.004 0.004 0.004 0.004 socket.py:176(_socketobject) - 1 0.000 0.000 0.000 0.000 socket.py:186(_closedsocket) - 1 0.001 0.001 0.001 0.001 socket.py:199(socket) - 350 0.004 0.000 0.008 0.000 socket.py:201(__init__) - 1 0.000 0.000 0.000 0.000 socket.py:226(_fileobject) - 320 0.003 0.000 0.004 0.000 socket.py:237(__init__) - 610 0.004 0.000 0.005 0.000 socket.py:267(close) - 30/1 0.087 0.003 0.000 0.000 socket.py:269(connect) - 320 0.001 0.000 0.002 0.000 socket.py:276(__del__) - 320 0.001 0.000 0.001 0.000 socket.py:283(flush) - 320 0.006 0.000 0.013 0.000 socket.py:315(dup) - 1 0.005 0.005 0.015 0.015 socket.py:32() - 320 0.003 0.000 0.020 0.000 socket.py:321(makefile) - 74636/1 0.330 0.000 3.136 3.136 socket.py:324(recv) - 295/271 0.011 0.000 0.019 0.000 socket.py:333(read) - 320 0.002 0.000 0.021 0.000 socket.py:365(send) - 320 0.006 0.000 0.028 0.000 socket.py:382(sendall) - 2352/1 0.327 0.000 3.136 3.136 socket.py:403(readline) - 350 0.001 0.000 0.001 0.000 socket.py:422(settimeout) - 1 0.004 0.004 0.008 0.008 socket.py:44() - 30/1 0.001 0.000 0.000 0.000 socket.py:534(create_connection) - 30 0.000 0.000 0.000 0.000 socket.py:579(gethostbyname) - 30/1 0.002 0.000 0.013 0.013 socket.py:603(getaddrinfo) - 179 0.003 0.000 0.028 0.000 sre_compile.py:184(_compile_charset) - 179 0.010 0.000 0.024 0.000 sre_compile.py:213(_optimize_charset) - 318 0.000 0.000 0.000 0.000 sre_compile.py:24(_identityfunction) - 17 0.003 0.000 0.003 0.000 sre_compile.py:264(_mk_bitmap) - 2 0.007 0.003 0.012 0.006 sre_compile.py:307(_optimize_unicode) - 175 0.001 0.000 0.002 0.000 sre_compile.py:360(_simple) - 55 0.002 0.000 0.019 0.000 sre_compile.py:367(_compile_info) - 422/55 0.016 0.000 0.048 0.001 sre_compile.py:38(_compile) - 108 0.001 0.000 0.001 0.000 sre_compile.py:480(isstring) - 55 0.001 0.000 0.067 0.001 sre_compile.py:486(_code) - 55 0.001 0.000 0.140 0.003 sre_compile.py:501(compile) - 20 0.000 0.000 0.000 0.000 sre_compile.py:57(fixup) - 847 0.007 0.000 0.007 0.000 sre_parse.py:132(__len__) - 4 0.000 0.000 0.000 0.000 sre_parse.py:134(__delitem__) - 1866 0.007 0.000 0.011 0.000 sre_parse.py:136(__getitem__) - 185 0.000 0.000 0.000 0.000 sre_parse.py:140(__setitem__) - 860 0.002 0.000 0.003 0.000 sre_parse.py:144(append) - 596/230 0.007 0.000 0.008 0.000 sre_parse.py:146(getwidth) - 64 0.000 0.000 0.001 0.000 sre_parse.py:184(__init__) - 2619 0.012 0.000 0.016 0.000 sre_parse.py:188(__next) - 1255 0.002 0.000 0.004 0.000 sre_parse.py:201(match) - 2257 0.009 0.000 0.023 0.000 sre_parse.py:207(get) - 11 0.000 0.000 0.000 0.000 sre_parse.py:211(tell) - 3 0.000 0.000 0.000 0.000 sre_parse.py:213(seek) - 12 0.000 0.000 0.000 0.000 sre_parse.py:216(isident) - 4 0.000 0.000 0.000 0.000 sre_parse.py:222(isname) - 130 0.001 0.000 0.001 0.000 sre_parse.py:231(_class_escape) - 147 0.001 0.000 0.001 0.000 sre_parse.py:263(_escape) - 184/64 0.003 0.000 0.073 0.001 sre_parse.py:307(_parse_sub) - 223/67 0.021 0.000 0.072 0.001 sre_parse.py:385(_parse) - 64/63 0.012 0.000 0.087 0.001 sre_parse.py:669(parse) - 66 0.000 0.000 0.000 0.000 sre_parse.py:73(__init__) - 90 0.000 0.000 0.000 0.000 sre_parse.py:78(opengroup) - 90 0.000 0.000 0.000 0.000 sre_parse.py:89(closegroup) - 1 0.000 0.000 0.000 0.000 sre_parse.py:91(checkgroup) - 441 0.002 0.000 0.002 0.000 sre_parse.py:96(__init__) - 1 0.000 0.000 0.001 0.001 ssl.py:13() - 1 0.001 0.001 0.002 0.002 ssl.py:56() - 1 0.001 0.001 0.001 0.001 ssl.py:58(SSLSocket) - 1 0.000 0.000 0.000 0.000 ssl.py:83(SSLSocket) - 1 0.001 0.001 0.001 0.001 status_codes.py:3() - 1 0.000 0.000 0.000 0.000 string.py:220(lower) - 1 0.000 0.000 0.000 0.000 string.py:248(strip) - 1 0.000 0.000 0.000 0.000 string.py:281(split) - 20 0.000 0.000 0.000 0.000 string.py:364(rfind) - 1 0.000 0.000 0.000 0.000 stringprep.py:6() - 1 0.000 0.000 0.000 0.000 structures.py:15(IteratorProxy) - 1 0.000 0.000 0.000 0.000 structures.py:36(CaseInsensitiveDict) - 1755 0.020 0.000 0.039 0.000 structures.py:42(lower_keys) - 3312 0.011 0.000 0.014 0.000 structures.py:45() - 1465 0.011 0.000 0.051 0.000 structures.py:60(__contains__) - 290 0.003 0.000 0.008 0.000 structures.py:63(__getitem__) - 580 0.004 0.000 0.037 0.000 structures.py:68(get) - 1 0.000 0.000 0.000 0.000 structures.py:75(LookupDict) - 1 0.000 0.000 0.000 0.000 structures.py:78(__init__) - 1 0.000 0.000 0.000 0.000 structures.py:9() - 1 0.000 0.000 0.000 0.000 tempfile.py:107(_RandomNameSequence) - 1 0.003 0.003 0.005 0.005 tempfile.py:18() - 1 0.000 0.000 0.000 0.000 tempfile.py:357(_TemporaryFileWrapper) - 1 0.000 0.000 0.000 0.000 tempfile.py:483(SpooledTemporaryFile) - 1 0.001 0.001 0.002 0.002 threading.py:1() - 1211 0.011 0.000 0.016 0.000 threading.py:101(__init__) - 939 0.012 0.000 0.018 0.000 threading.py:116(acquire) - 939 0.009 0.000 0.013 0.000 threading.py:136(release) - 11 0.000 0.000 0.000 0.000 threading.py:176(Condition) - 1 0.000 0.000 0.000 0.000 threading.py:179(_Condition) - 11 0.000 0.000 0.000 0.000 threading.py:181(__init__) - 641 0.003 0.000 0.005 0.000 threading.py:221(_is_owned) - 641 0.005 0.000 0.011 0.000 threading.py:272(notify) - 1 0.000 0.000 0.000 0.000 threading.py:290(notifyAll) - 1 0.000 0.000 0.000 0.000 threading.py:299(_Semaphore) - 1 0.000 0.000 0.000 0.000 threading.py:347(_BoundedSemaphore) - 1 0.000 0.000 0.000 0.000 threading.py:359(Event) - 1 0.000 0.000 0.000 0.000 threading.py:362(_Event) - 1 0.000 0.000 0.000 0.000 threading.py:366(__init__) - 1 0.000 0.000 0.000 0.000 threading.py:376(set) - 1 0.000 0.000 0.000 0.000 threading.py:414(Thread) - 1 0.000 0.000 0.000 0.000 threading.py:426(__init__) - 1 0.000 0.000 0.000 0.000 threading.py:510(_set_ident) - 1 0.000 0.000 0.000 0.000 threading.py:57(_Verbose) - 1224 0.003 0.000 0.003 0.000 threading.py:59(__init__) - 2519 0.005 0.000 0.005 0.000 threading.py:64(_note) - 1 0.000 0.000 0.000 0.000 threading.py:713(_Timer) - 1 0.000 0.000 0.000 0.000 threading.py:742(_MainThread) - 1 0.000 0.000 0.000 0.000 threading.py:744(__init__) - 1 0.000 0.000 0.000 0.000 threading.py:752(_set_daemon) - 1 0.000 0.000 0.000 0.000 threading.py:783(_DummyThread) - 1211 0.015 0.000 0.031 0.000 threading.py:96(RLock) - 1 0.000 0.000 0.000 0.000 threading.py:99(_RLock) - 30 0.000 0.000 0.001 0.000 timeout.py:100(start_new) - 30 0.000 0.000 0.000 0.000 timeout.py:120(pending) - 30 0.000 0.000 0.000 0.000 timeout.py:128(cancel) - 1 0.000 0.000 0.000 0.000 timeout.py:14() - 1 0.000 0.000 0.000 0.000 timeout.py:32(Timeout) - 30 0.000 0.000 0.000 0.000 timeout.py:85(__init__) - 30 0.000 0.000 0.000 0.000 timeout.py:90(start) - 1 0.000 0.000 0.000 0.000 traceback.py:1() - 1 0.000 0.000 0.000 0.000 urllib.py:109(ContentTooShortError) - 1 0.000 0.000 0.000 0.000 urllib.py:115(URLopener) - 485 0.002 0.000 0.002 0.000 urllib.py:1168() - 320 0.005 0.000 0.013 0.000 urllib.py:1193(quote) - 320 0.005 0.000 0.007 0.000 urllib.py:1234(urlencode) - 1 0.004 0.004 0.024 0.024 urllib.py:23() - 1 0.000 0.000 0.000 0.000 urllib.py:615(FancyURLopener) - 1 0.000 0.000 0.000 0.000 urllib.py:845(ftpwrapper) - 1 0.000 0.000 0.000 0.000 urllib.py:923(addbase) - 1 0.000 0.000 0.000 0.000 urllib.py:952(addclosehook) - 1 0.000 0.000 0.000 0.000 urllib.py:967(addinfo) - 1 0.000 0.000 0.000 0.000 urllib.py:977(addinfourl) - 1 0.000 0.000 0.000 0.000 urllib2.py:1035(HTTPDigestAuthHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1053(ProxyDigestAuthHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1065(AbstractHTTPHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1167(HTTPHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1175(HTTPSHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1182(HTTPCookieProcessor) - 1 0.000 0.000 0.000 0.000 urllib2.py:1200(UnknownHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1258(FileHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1310(FTPHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:136(URLError) - 1 0.000 0.000 0.000 0.000 urllib2.py:1369(CacheFTPHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:149(HTTPError) - 1 0.000 0.000 0.000 0.000 urllib2.py:187(Request) - 1 0.000 0.000 0.000 0.000 urllib2.py:297(OpenerDirector) - 1 0.000 0.000 0.000 0.000 urllib2.py:480(BaseHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:499(HTTPErrorProcessor) - 1 0.000 0.000 0.000 0.000 urllib2.py:516(HTTPDefaultErrorHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:520(HTTPRedirectHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:686(ProxyHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:729(HTTPPasswordMgr) - 1 0.001 0.001 0.007 0.007 urllib2.py:76() - 1 0.000 0.000 0.000 0.000 urllib2.py:793(HTTPPasswordMgrWithDefaultRealm) - 1 0.000 0.000 0.004 0.004 urllib2.py:803(AbstractBasicAuthHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:857(HTTPBasicAuthHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:867(ProxyBasicAuthHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:895(AbstractDigestAuthHandler) - 1 0.000 0.000 0.000 0.000 urlparse.py:107(SplitResult) - 1 0.000 0.000 0.000 0.000 urlparse.py:115(ParseResult) - 2210 0.021 0.000 0.122 0.000 urlparse.py:123(urlparse) - 930 0.017 0.000 0.027 0.000 urlparse.py:146(_splitnetloc) - 2530 0.043 0.000 0.091 0.000 urlparse.py:154(urlsplit) - 320 0.001 0.000 0.003 0.000 urlparse.py:198(urlunparse) - 320 0.002 0.000 0.002 0.000 urlparse.py:208(urlunsplit) - 1 0.002 0.002 0.008 0.008 urlparse.py:26() - 485 0.002 0.000 0.002 0.000 urlparse.py:303() - 46 0.000 0.000 0.002 0.000 urlparse.py:59(clear_cache) - 1 0.000 0.000 0.000 0.000 urlparse.py:64(ResultMixin) - 320 0.001 0.000 0.001 0.000 urlparse.py:67(username) - 320 0.001 0.000 0.001 0.000 urlparse.py:77(password) - 610 0.003 0.000 0.008 0.000 utf_8.py:15(decode) - 2 0.001 0.000 0.112 0.056 util.py:182(_findSoname_ldconfig) - 1 0.000 0.000 0.000 0.000 util.py:2() - 2 0.000 0.000 0.112 0.056 util.py:206(find_library) - 290 0.004 0.000 0.012 0.000 util.py:235(is_connection_dropped) - 1 0.000 0.000 0.000 0.000 util.py:37(Url) - 1 0.000 0.000 0.000 0.000 util.py:4() - 1 0.000 0.000 0.000 0.000 util.py:4(wrap_errors) - 320 0.003 0.000 0.005 0.000 util.py:44(__new__) - 1 0.000 0.000 0.000 0.000 util.py:50(lazy_property) - 1 0.000 0.000 0.000 0.000 util.py:53(__init__) - 320 0.008 0.000 0.009 0.000 util.py:63(split_first) - 1 0.002 0.002 0.007 0.007 util.py:8() - 320 0.006 0.000 0.021 0.000 util.py:96(parse_url) - 1 0.004 0.004 0.363 0.363 utils.py:10() - 320 0.004 0.000 0.006 0.000 utils.py:118(to_key_val_list) - 290 0.004 0.000 0.056 0.000 utils.py:270(get_encoding_from_headers) - 290 0.002 0.000 0.007 0.000 utils.py:381(stream_untransfer) - 320 0.003 0.000 0.006 0.000 utils.py:397(unquote_unreserved) - 320 0.002 0.000 0.022 0.000 utils.py:415(requote_uri) - 320 0.011 0.000 0.050 0.000 utils.py:427(get_environ_proxies) - 320 0.002 0.000 0.005 0.000 utils.py:43(super_len) - 1920 0.018 0.000 0.039 0.000 utils.py:438() - 3 0.000 0.000 0.000 0.000 utils.py:462(default_user_agent) - 3 0.000 0.000 0.000 0.000 utils.py:493(default_headers) - 320 0.007 0.000 0.056 0.000 utils.py:52(get_netrc_auth) - 960 0.006 0.000 0.028 0.000 utils.py:56() - 640 0.005 0.000 0.014 0.000 utils.py:584(get_auth_from_url) - 1280 0.019 0.000 0.106 0.000 utils.py:95(from_key_val_list) - 4 0.000 0.000 0.000 0.000 uuid.py:101(__init__) - 1 0.001 0.001 0.120 0.120 uuid.py:45() - 1 0.000 0.000 0.000 0.000 uuid.py:53(UUID) - 2 0.000 0.000 0.000 0.000 warnings.py:14(warnpy3k) - 3 0.000 0.000 0.000 0.000 warnings.py:324(__init__) - 3 0.000 0.000 0.000 0.000 warnings.py:345(__enter__) - 3 0.000 0.000 0.000 0.000 warnings.py:361(__exit__) - 2 0.000 0.000 0.004 0.002 warnings.py:45(filterwarnings) - 11 0.002 0.000 0.017 0.002 {__import__} - 1 0.000 0.000 0.000 0.000 {_codecs.lookup} - 610 0.004 0.000 0.004 0.000 {_codecs.utf_8_decode} - 2 0.000 0.000 0.000 0.000 {_ctypes.POINTER} - 3 0.000 0.000 0.000 0.000 {_ctypes.dlopen} - 1 0.000 0.000 0.000 0.000 {_ctypes.set_conversion_mode} - 38 0.000 0.000 0.000 0.000 {_ctypes.sizeof} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_md5} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha1} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha224} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha256} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha384} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha512} - 350 0.000 0.000 0.000 0.000 {_socket.getdefaulttimeout} - 30 0.000 0.000 0.000 0.000 {_socket.inet_ntop} - 55 0.000 0.000 0.000 0.000 {_sre.compile} - 161 0.000 0.000 0.000 0.000 {_sre.getlower} - 20 0.000 0.000 0.000 0.000 {_struct.calcsize} - 341 0.001 0.000 0.001 0.000 {all} - 322 0.000 0.000 0.001 0.000 {any} - 1 0.000 0.000 0.000 0.000 {binascii.hexlify} - 323 0.001 0.000 0.001 0.000 {built-in method __enter__} - 3478 0.009 0.000 0.009 0.000 {built-in method __new__ of type object at 0x82f680} - 2222 0.006 0.000 0.006 0.000 {built-in method acquire} - 320 0.001 0.000 0.001 0.000 {built-in method fromkeys} - 2 0.000 0.000 0.000 0.000 {built-in method groups} - 2 0.000 0.000 0.000 0.000 {built-in method group} - 65 0.000 0.000 0.000 0.000 {built-in method match} - 290 0.002 0.000 0.002 0.000 {built-in method poll} - 290 0.003 0.000 0.005 0.000 {built-in method register} - 1581 0.002 0.000 0.002 0.000 {built-in method release} - 2 0.093 0.046 0.093 0.046 {built-in method search} - 320 0.005 0.000 0.005 0.000 {built-in method split} - 610 0.006 0.000 0.006 0.000 {built-in method utcnow} - 2967 0.004 0.000 0.004 0.000 {cStringIO.StringIO} - 1253 0.001 0.000 0.001 0.000 {callable} - 1768 0.002 0.000 0.002 0.000 {chr} - 1 0.000 0.000 0.000 0.000 {delattr} - 2 0.000 0.000 0.000 0.000 {dir} - 2/1 0.001 0.001 3.163 3.163 {execfile} - 2 0.000 0.000 0.000 0.000 {filter} - 1 0.000 0.000 0.000 0.000 {function seed at 0x1d496e0} - 3602 0.011 0.000 0.011 0.000 {getattr} - 1 0.000 0.000 0.000 0.000 {gevent.core.dns_init} - 30 0.009 0.000 0.009 0.000 {gevent.core.dns_resolve_ipv4} - 693 0.001 0.000 0.001 0.000 {gevent.core.set_exc_info} - 247 0.000 0.000 0.000 0.000 {globals} - 1759 0.002 0.000 0.002 0.000 {greenlet.getcurrent} - 6832 0.024 0.000 0.024 0.000 {hasattr} - 320 0.000 0.000 0.000 0.000 {hash} -14669/14668 0.045 0.000 0.047 0.000 {isinstance} - 2 0.000 0.000 0.000 0.000 {issubclass} - 1 0.000 0.000 0.000 0.000 {iter} -23634/23408 0.025 0.000 0.026 0.000 {len} - 4 0.000 0.000 0.000 0.000 {locals} - 2383 0.022 0.000 0.022 0.000 {map} - 1 0.000 0.000 0.000 0.000 {math.exp} - 2 0.000 0.000 0.000 0.000 {math.log} - 1 0.000 0.000 0.000 0.000 {math.sqrt} - 360 0.001 0.000 0.001 0.000 {max} - 21 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects} - 1359 0.008 0.000 0.010 0.000 {method 'add' of 'set' objects} - 296 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects} - 86128 0.102 0.000 0.102 0.000 {method 'append' of 'list' objects} - 367 0.001 0.000 0.001 0.000 {method 'cancel' of 'gevent.core.event' objects} - 1 0.000 0.000 0.000 0.000 {method 'clear' of 'collections.deque' objects} - 46 0.001 0.000 0.001 0.000 {method 'clear' of 'dict' objects} - 1 0.000 0.000 0.000 0.000 {method 'close' of 'file' objects} - 60 0.002 0.000 0.002 0.000 {method 'connect_ex' of '_socket.socket' objects} - 275 0.001 0.000 0.001 0.000 {method 'copy' of 'dict' objects} - 4 0.000 0.000 0.000 0.000 {method 'count' of 'list' objects} - 289 0.001 0.000 0.001 0.000 {method 'count' of 'str' objects} - 610 0.004 0.000 0.012 0.000 {method 'decode' of 'str' objects} - 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} - 661 0.001 0.000 0.001 0.000 {method 'discard' of 'set' objects} - 1281 0.006 0.000 0.007 0.000 {method 'encode' of 'str' objects} -2240/1280 0.010 0.000 0.048 0.000 {method 'encode' of 'unicode' objects} - 37 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects} - 358 0.001 0.000 0.001 0.000 {method 'extend' of 'list' objects} - 642 0.001 0.000 0.001 0.000 {method 'fileno' of '_socket.socket' objects} - 6668 0.011 0.000 0.011 0.000 {method 'find' of 'str' objects} - 1280 0.005 0.000 0.005 0.000 {method 'find' of 'unicode' objects} - 672 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects} - 13613 0.018 0.000 0.018 0.000 {method 'get' of 'dict' objects} - 60 0.000 0.000 0.000 0.000 {method 'getsockopt' of '_socket.socket' objects} - 2 0.000 0.000 0.000 0.000 {method 'getvalue' of 'cStringIO.StringO' objects} - 578 0.001 0.000 0.001 0.000 {method 'index' of 'str' objects} - 5 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects} - 124 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects} - 21 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects} - 3484 0.003 0.000 0.003 0.000 {method 'isspace' of 'str' objects} - 254 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects} - 3890 0.007 0.000 0.007 0.000 {method 'items' of 'dict' objects} - 320 0.000 0.000 0.000 0.000 {method 'iteritems' of 'dict' objects} -5134/4702 0.023 0.000 0.173 0.000 {method 'join' of 'str' objects} - 2992 0.004 0.000 0.004 0.000 {method 'keys' of 'dict' objects} - 18014 0.028 0.000 0.028 0.000 {method 'lower' of 'str' objects} - 320 0.001 0.000 0.001 0.000 {method 'lower' of 'unicode' objects} - 1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects} - 2280 0.003 0.000 0.003 0.000 {method 'pop' of 'dict' objects} - 320 0.001 0.000 0.001 0.000 {method 'pop' of 'list' objects} - 954 0.001 0.000 0.001 0.000 {method 'pop' of 'set' objects} - 293 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects} - 2352 0.003 0.000 0.003 0.000 {method 'read' of 'cStringIO.StringO' objects} - 3 0.010 0.003 0.010 0.003 {method 'read' of 'file' objects} - 74928 0.248 0.000 0.248 0.000 {method 'recv' of '_socket.socket' objects} - 90 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects} - 32 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects} - 6 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects} - 22 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects} - 592 0.002 0.000 0.002 0.000 {method 'rotate' of 'collections.deque' objects} - 641 0.001 0.000 0.001 0.000 {method 'rstrip' of 'str' objects} - 4999 0.010 0.000 0.010 0.000 {method 'seek' of 'cStringIO.StringO' objects} - 320 0.019 0.000 0.019 0.000 {method 'send' of '_socket.socket' objects} - 350 0.001 0.000 0.001 0.000 {method 'setblocking' of '_socket.socket' objects} - 1864 0.005 0.000 0.005 0.000 {method 'setdefault' of 'dict' objects} - 2 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects} - 2381 0.005 0.000 0.005 0.000 {method 'sort' of 'list' objects} - 1237 0.004 0.000 0.004 0.000 {method 'split' of 'str' objects} - 2657 0.006 0.000 0.006 0.000 {method 'startswith' of 'str' objects} - 4930 0.007 0.000 0.007 0.000 {method 'strip' of 'str' objects} - 372 0.014 0.000 0.019 0.000 {method 'switch' of 'greenlet.greenlet' objects} - 2647 0.005 0.000 0.005 0.000 {method 'tell' of 'cStringIO.StringO' objects} - 2 0.000 0.000 0.000 0.000 {method 'tolist' of 'array.array' objects} - 1 0.000 0.000 0.000 0.000 {method 'toordinal' of 'datetime.date' objects} - 2 0.000 0.000 0.000 0.000 {method 'tostring' of 'array.array' objects} - 5 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects} - 640 0.002 0.000 0.002 0.000 {method 'update' of 'dict' objects} - 2671 0.004 0.000 0.004 0.000 {method 'upper' of 'str' objects} - 4 0.000 0.000 0.000 0.000 {method 'write' of 'cStringIO.StringO' objects} - 1837 0.004 0.000 0.004 0.000 {min} - 320 0.002 0.000 0.010 0.000 {next} - 743 0.001 0.000 0.001 0.000 {ord} - 1 0.000 0.000 0.000 0.000 {posix.close} - 1 0.000 0.000 0.000 0.000 {posix.open} - 3 0.003 0.001 0.003 0.001 {posix.popen} - 1 0.000 0.000 0.000 0.000 {posix.read} - 652 0.012 0.000 0.012 0.000 {posix.stat} - 3 0.000 0.000 0.000 0.000 {posix.uname} - 664 0.002 0.000 0.002 0.000 {range} - 3 0.000 0.000 0.000 0.000 {repr} - 290 0.000 0.000 0.000 0.000 {select.poll} - 274 0.001 0.000 0.001 0.000 {setattr} - 4 0.000 0.000 0.000 0.000 {sys._getframe} - 1015 0.004 0.000 0.004 0.000 {sys.exc_clear} - 693 0.002 0.000 0.002 0.000 {sys.exc_info} - 1225 0.002 0.000 0.002 0.000 {thread.allocate_lock} - 1880 0.002 0.000 0.002 0.000 {thread.get_ident} - 931 0.002 0.000 0.002 0.000 {time.time} - 1 0.000 0.000 0.000 0.000 {zip} - - diff --git a/toys/grbrute_profiling/profile_pphidden_async_data_sorted.txt b/toys/grbrute_profiling/profile_pphidden_async_data_sorted.txt deleted file mode 100644 index 414c74d..0000000 --- a/toys/grbrute_profiling/profile_pphidden_async_data_sorted.txt +++ /dev/null @@ -1,1023 +0,0 @@ - ncalls tottime percall cumtime percall filename:lineno(function) - 55 0.001 0.000 89.072 1.619 greenlet.py:475(_kill) - 55 0.011 0.000 89.067 1.619 greenlet.py:202(throw) - 7 0.006 0.001 3.174 0.453 greenlet.py:480(joinall) - 2/1 0.001 0.000 3.165 3.165 :1() - 2/1 0.003 0.002 3.163 3.163 pphidden_async.py:1() - 2/1 0.000 0.000 3.163 3.163 pool.py:76(join) - 2/1 0.000 0.000 3.163 3.163 grbrute.py:47(__init__) - 2/1 0.001 0.001 3.163 3.163 {execfile} - 320/1 0.018 0.000 3.158 3.158 greenlet.py:384(run) - 320/1 0.012 0.000 3.137 3.137 sessions.py:241(request) - 320/1 0.016 0.000 3.137 3.137 grequests.py:97(send) - 2352/1 0.327 0.000 3.136 3.136 socket.py:403(readline) - 74636/1 0.330 0.000 3.136 3.136 socket.py:324(recv) - 320/1 0.021 0.000 3.136 3.136 sessions.py:430(send) - 320/1 0.016 0.000 3.136 3.136 httplib.py:956(getresponse) - 320/1 0.027 0.000 3.136 3.136 httplib.py:384(begin) - 320/1 0.011 0.000 3.136 3.136 httplib.py:347(_read_status) - 320/1 0.019 0.000 3.136 3.136 connectionpool.py:325(urlopen) - 320/1 0.016 0.000 3.136 3.136 connectionpool.py:261(_make_request) - 320/1 0.016 0.000 3.136 3.136 adapters.py:188(send) - 290/1 0.010 0.000 3.135 3.135 hooks.py:29(dispatch_hook) - 290/1 0.010 0.000 3.133 3.133 grbrute.py:82(_cb_response) - 290/1 0.013 0.000 3.133 3.133 grbrute.py:33(_cb_response_session) - 290 0.012 0.000 0.966 0.003 mimetools.py:24(__init__) - 290 0.002 0.000 0.926 0.003 rfc822.py:88(__init__) - 290 0.065 0.000 0.924 0.003 httplib.py:230(readheaders) - 1 0.001 0.001 0.401 0.401 grbrute.py:1() - 1 0.001 0.001 0.371 0.371 __init__.py:42() - 320 0.012 0.000 0.364 0.001 models.py:214(prepare) - 1 0.004 0.004 0.363 0.363 utils.py:10() - 1 0.007 0.007 0.285 0.285 compat.py:5() - 585/537 0.004 0.000 0.250 0.000 models.py:526(generate) - 74928 0.248 0.000 0.248 0.000 {method 'recv' of '_socket.socket' objects} - 585/537 0.015 0.000 0.246 0.000 response.py:112(read) - 320/291 0.002 0.000 0.224 0.001 httplib.py:910(request) - 320/291 0.011 0.000 0.223 0.001 httplib.py:922(_send_request) - 2560 0.021 0.000 0.201 0.000 sessions.py:36(merge_kwargs) - 290 0.014 0.000 0.198 0.001 adapters.py:105(build_response) - 320/291 0.003 0.000 0.180 0.001 httplib.py:900(endheaders) -5134/4702 0.023 0.000 0.173 0.000 {method 'join' of 'str' objects} - 290/266 0.004 0.000 0.169 0.001 models.py:567(content) - 3 0.001 0.000 0.166 0.055 __init__.py:1() - 1 0.001 0.001 0.165 0.165 __init__.py:9() - 1 0.007 0.007 0.162 0.162 connectionpool.py:7() - 320 0.017 0.000 0.154 0.000 models.py:273(prepare_url) - 55 0.001 0.000 0.140 0.003 sre_compile.py:501(compile) - 57 0.002 0.000 0.136 0.002 re.py:229(_compile) - 1 0.000 0.000 0.133 0.133 request.py:7() - 1 0.005 0.005 0.133 0.133 filepost.py:7() - 54 0.000 0.000 0.125 0.002 re.py:188(compile) - 2210 0.021 0.000 0.122 0.000 urlparse.py:123(urlparse) - 1926 0.045 0.000 0.122 0.000 ordered_dict.py:29(__init__) - 320 0.007 0.000 0.121 0.000 models.py:423(prepare_cookies) - 1 0.001 0.001 0.120 0.120 uuid.py:45() - 2 0.000 0.000 0.112 0.056 util.py:206(find_library) - 2 0.001 0.000 0.112 0.056 util.py:182(_findSoname_ldconfig) - 1280 0.019 0.000 0.106 0.000 utils.py:95(from_key_val_list) - 2 0.000 0.000 0.102 0.051 re.py:139(search) - 86128 0.102 0.000 0.102 0.000 {method 'append' of 'list' objects} - 290 0.005 0.000 0.094 0.000 cookies.py:94(extract_cookies_to_jar) - 2 0.093 0.046 0.093 0.046 {built-in method search} - 2530 0.043 0.000 0.091 0.000 urlparse.py:154(urlsplit) - 320 0.005 0.000 0.091 0.000 cookies.py:108(get_cookie_header) - 64/63 0.012 0.000 0.087 0.001 sre_parse.py:669(parse) - 291 0.010 0.000 0.082 0.000 grbrute.py:65(_send) - 1926 0.047 0.000 0.075 0.000 ordered_dict.py:143(update) - 184/64 0.003 0.000 0.073 0.001 sre_parse.py:307(_parse_sub) - 223/67 0.021 0.000 0.072 0.001 sre_parse.py:385(_parse) - 1740 0.016 0.000 0.069 0.000 cookies.py:257(update) - 320 0.007 0.000 0.069 0.000 adapters.py:133(get_connection) - 55 0.001 0.000 0.067 0.001 sre_compile.py:486(_code) - 610 0.008 0.000 0.065 0.000 cookies.py:32(__init__) - 320 0.007 0.000 0.061 0.000 grbrute.py:27(add) - 1208 0.021 0.000 0.058 0.000 cookielib.py:1217(__init__) - 290 0.009 0.000 0.057 0.000 cookielib.py:1635(extract_cookies) - 320 0.007 0.000 0.056 0.000 utils.py:52(get_netrc_auth) - 290 0.004 0.000 0.056 0.000 utils.py:270(get_encoding_from_headers) - 275 0.009 0.000 0.055 0.000 sessions.py:82(resolve_redirects) - 888 0.015 0.000 0.055 0.000 cookies.py:374(cookiejar_from_dict) - 1 0.003 0.003 0.053 0.053 cookielib.py:26() - 1465 0.011 0.000 0.051 0.000 structures.py:60(__contains__) - 320 0.004 0.000 0.051 0.000 poolmanager.py:104(connection_from_url) - 320 0.012 0.000 0.051 0.000 cookielib.py:1312(add_cookie_header) - 320 0.011 0.000 0.050 0.000 utils.py:427(get_environ_proxies) - 320 0.004 0.000 0.050 0.000 grequests.py:112(send) - 422/55 0.016 0.000 0.048 0.001 sre_compile.py:38(_compile) -2240/1280 0.010 0.000 0.048 0.000 {method 'encode' of 'unicode' objects} -14669/14668 0.045 0.000 0.047 0.000 {isinstance} - 1 0.012 0.012 0.044 0.044 cgi.py:16() - 640 0.005 0.000 0.044 0.000 ordered_dict.py:221(copy) - 2060 0.007 0.000 0.044 0.000 cookielib.py:1180(deepvalues) - 320 0.002 0.000 0.042 0.000 cookies.py:309(copy) - 320 0.010 0.000 0.041 0.000 connectionpool.py:200(_get_conn) - 1920 0.018 0.000 0.039 0.000 utils.py:438() - 1755 0.020 0.000 0.039 0.000 structures.py:42(lower_keys) - 580 0.004 0.000 0.037 0.000 structures.py:68(get) - 320/291 0.004 0.000 0.037 0.000 httplib.py:772(_send_output) - 2060 0.015 0.000 0.037 0.000 cookielib.py:1175(vals_sorted_by_key) - 1 0.001 0.001 0.036 0.036 __init__.py:98() - 290 0.017 0.000 0.035 0.000 response.py:176(from_httplib) - 290 0.004 0.000 0.035 0.000 cookielib.py:1555(make_cookies) - 320 0.005 0.000 0.033 0.000 pool.py:196(spawn) - 320/291 0.006 0.000 0.033 0.000 httplib.py:735(send) - 585/537 0.005 0.000 0.033 0.000 httplib.py:513(read) - 1 0.001 0.001 0.031 0.031 decoder.py:2() - 1211 0.015 0.000 0.031 0.000 threading.py:96(RLock) - 580 0.003 0.000 0.031 0.000 rfc822.py:295(getheaders) - 1 0.000 0.000 0.029 0.029 platform.py:10() - 1 0.004 0.004 0.029 0.029 grequests.py:14() - 960 0.006 0.000 0.028 0.000 utils.py:56() - 179 0.003 0.000 0.028 0.000 sre_compile.py:184(_compile_charset) - 320 0.006 0.000 0.028 0.000 socket.py:382(sendall) - 580 0.018 0.000 0.028 0.000 rfc822.py:228(getallmatchingheaders) - 18014 0.028 0.000 0.028 0.000 {method 'lower' of 'str' objects} - 930 0.017 0.000 0.027 0.000 urlparse.py:146(_splitnetloc) - 320 0.003 0.000 0.026 0.000 poolmanager.py:81(connection_from_host) - 290 0.010 0.000 0.026 0.000 models.py:447(__init__) -23634/23408 0.025 0.000 0.026 0.000 {len} - 320 0.009 0.000 0.026 0.000 idna.py:147(encode) - 322 0.008 0.000 0.025 0.000 socket.py:128(_wait_helper) - 1 0.004 0.004 0.024 0.024 urllib.py:23() - 179 0.010 0.000 0.024 0.000 sre_compile.py:213(_optimize_charset) - 320 0.004 0.000 0.024 0.000 httplib.py:329(__init__) - 6832 0.024 0.000 0.024 0.000 {hasattr} - 2 0.000 0.000 0.023 0.011 scanner.py:18(__init__) - 2257 0.009 0.000 0.023 0.000 sre_parse.py:207(get) - 320 0.015 0.000 0.023 0.000 httplib.py:782(putrequest) - 320 0.002 0.000 0.022 0.000 utils.py:415(requote_uri) - 1742 0.016 0.000 0.022 0.000 rfc822.py:197(isheader) - 1600 0.022 0.000 0.022 0.000 ordered_dict.py:45(__setitem__) - 2383 0.022 0.000 0.022 0.000 {map} - 320 0.005 0.000 0.022 0.000 cookielib.py:1691(clear_expired_cookies) - 320 0.006 0.000 0.021 0.000 util.py:96(parse_url) - 4492 0.015 0.000 0.021 0.000 UserDict.py:57(get) - 320 0.002 0.000 0.021 0.000 socket.py:365(send) - 580 0.004 0.000 0.021 0.000 response.py:96(release_conn) - 652 0.010 0.000 0.021 0.000 genericpath.py:15(exists) - 320 0.002 0.000 0.021 0.000 _abcoll.py:334(get) - 320 0.003 0.000 0.020 0.000 socket.py:321(makefile) - 320 0.002 0.000 0.020 0.000 pool.py:189(start) - 320 0.005 0.000 0.020 0.000 models.py:58(_encode_params) - 320 0.006 0.000 0.020 0.000 models.py:332(prepare_body) - 320 0.010 0.000 0.020 0.000 models.py:323(prepare_headers) - 320 0.004 0.000 0.020 0.000 adapters.py:154(request_url) - 55 0.002 0.000 0.019 0.000 sre_compile.py:367(_compile_info) - 295/271 0.011 0.000 0.019 0.000 socket.py:333(read) - 640 0.012 0.000 0.019 0.000 posixpath.py:248(expanduser) - 320 0.005 0.000 0.019 0.000 models.py:401(prepare_auth) - 372 0.014 0.000 0.019 0.000 {method 'switch' of 'greenlet.greenlet' objects} - 320 0.019 0.000 0.019 0.000 {method 'send' of '_socket.socket' objects} - 320 0.005 0.000 0.019 0.000 _collections.py:45(__getitem__) - 290 0.009 0.000 0.019 0.000 cgi.py:304(parse_header) - 939 0.012 0.000 0.018 0.000 threading.py:116(acquire) - 13613 0.018 0.000 0.018 0.000 {method 'get' of 'dict' objects} - 320 0.007 0.000 0.018 0.000 greenlet.py:459(_notify_links) - 1 0.001 0.001 0.017 0.017 Cookie.py:206() - 2 0.000 0.000 0.017 0.008 __init__.py:71(search_function) - 11 0.002 0.000 0.017 0.002 {__import__} - 290 0.002 0.000 0.017 0.000 connectionpool.py:233(_put_conn) - 1 0.000 0.000 0.016 0.016 monkey.py:95(patch_all) - 1 0.001 0.001 0.016 0.016 monkey.py:44(patch_socket) - 1 0.001 0.001 0.016 0.016 idna.py:3() - 1211 0.011 0.000 0.016 0.000 threading.py:101(__init__) - 2619 0.012 0.000 0.016 0.000 sre_parse.py:188(__next) - 320 0.007 0.000 0.016 0.000 Queue.py:107(put) - 320 0.003 0.000 0.016 0.000 models.py:436(prepare_hooks) - 1 0.005 0.005 0.015 0.015 socket.py:32() - 320 0.005 0.000 0.015 0.000 Queue.py:150(get) - 640 0.005 0.000 0.014 0.000 utils.py:584(get_auth_from_url) - 3312 0.011 0.000 0.014 0.000 structures.py:45() - 1740 0.010 0.000 0.014 0.000 rfc822.py:285(getheader) - 320 0.003 0.000 0.014 0.000 pool.py:43(add) - 290 0.007 0.000 0.014 0.000 mimetools.py:33(parsetype) - 933 0.007 0.000 0.014 0.000 greenlet.py:400(rawlink) - 30/1 0.002 0.000 0.013 0.013 socket.py:603(getaddrinfo) - 320 0.005 0.000 0.013 0.000 urllib.py:1193(quote) - 939 0.009 0.000 0.013 0.000 threading.py:136(release) - 2210 0.008 0.000 0.013 0.000 :8(__new__) - 320 0.006 0.000 0.013 0.000 socket.py:315(dup) - 2 0.007 0.003 0.012 0.006 sre_compile.py:307(_optimize_unicode) - 290 0.004 0.000 0.012 0.000 util.py:235(is_connection_dropped) - 652 0.012 0.000 0.012 0.000 {posix.stat} - 610 0.004 0.000 0.012 0.000 {method 'decode' of 'str' objects} - 320 0.001 0.000 0.012 0.000 greenlet.py:455(link_exception) - 641 0.005 0.000 0.011 0.000 threading.py:272(notify) - 1866 0.007 0.000 0.011 0.000 sre_parse.py:136(__getitem__) - 320 0.004 0.000 0.011 0.000 models.py:136(register_hook) - 6668 0.011 0.000 0.011 0.000 {method 'find' of 'str' objects} - 1280 0.007 0.000 0.011 0.000 httplib.py:889(putheader) - 320 0.004 0.000 0.011 0.000 greenlet.py:411(link) - 3602 0.011 0.000 0.011 0.000 {getattr} - 320 0.004 0.000 0.011 0.000 adapters.py:169(add_headers) - 3 0.010 0.003 0.010 0.003 {method 'read' of 'file' objects} - 290 0.010 0.000 0.010 0.000 pphidden_async.py:29(cb_response) - 320 0.004 0.000 0.010 0.000 ordered_dict.py:178(pop) - 320 0.002 0.000 0.010 0.000 {next} - 290 0.003 0.000 0.010 0.000 models.py:515(iter_content) - 1280 0.006 0.000 0.010 0.000 models.py:327() - 4999 0.010 0.000 0.010 0.000 {method 'seek' of 'cStringIO.StringO' objects} - 1359 0.008 0.000 0.010 0.000 {method 'add' of 'set' objects} - 320 0.002 0.000 0.010 0.000 __init__.py:1244(isEnabledFor) - 580 0.005 0.000 0.010 0.000 httplib.py:497(close) - 1742 0.008 0.000 0.010 0.000 httplib.py:216(addheader) - 1 0.004 0.004 0.009 0.009 mimetools.py:1() - 1 0.006 0.006 0.009 0.009 __init__.py:5() - 320 0.008 0.000 0.009 0.000 util.py:63(split_first) - 320 0.009 0.000 0.009 0.000 pphidden_async.py:19(next) - 1280 0.006 0.000 0.009 0.000 ordered_dict.py:125(items) - 290 0.007 0.000 0.009 0.000 mimetools.py:50(parseplist) - 290 0.001 0.000 0.009 0.000 __init__.py:1034(debug) - 960 0.005 0.000 0.009 0.000 idna.py:62(ToASCII) - 320 0.008 0.000 0.009 0.000 greenlet.py:146(__init__) - 30 0.009 0.000 0.009 0.000 {gevent.core.dns_resolve_ipv4} - 869 0.006 0.000 0.009 0.000 cgi.py:292(_parseparam) - 3478 0.009 0.000 0.009 0.000 {built-in method __new__ of type object at 0x82f680} - 1 0.002 0.002 0.008 0.008 urlparse.py:26() - 1 0.004 0.004 0.008 0.008 socket.py:44() - 610 0.003 0.000 0.008 0.000 utf_8.py:15(decode) - 5132 0.008 0.000 0.008 0.000 UserDict.py:69(__contains__) - 290 0.003 0.000 0.008 0.000 structures.py:63(__getitem__) - 596/230 0.007 0.000 0.008 0.000 sre_parse.py:146(getwidth) - 350 0.004 0.000 0.008 0.000 socket.py:201(__init__) - 290 0.006 0.000 0.008 0.000 response.py:60(__init__) - 4480 0.008 0.000 0.008 0.000 ordered_dict.py:64(__iter__) - 320 0.004 0.000 0.008 0.000 models.py:37(path_url) - 320 0.008 0.000 0.008 0.000 __init__.py:1230(getEffectiveLevel) - 2060 0.008 0.000 0.008 0.000 cookielib.py:1710(__iter__) - 1 0.002 0.002 0.007 0.007 util.py:8() - 1 0.001 0.001 0.007 0.007 urllib2.py:76() - 1 0.000 0.000 0.007 0.007 decoder.py:244(JSONDecoder) - 290 0.002 0.000 0.007 0.000 utils.py:381(stream_untransfer) - 320 0.005 0.000 0.007 0.000 urllib.py:1234(urlencode) - 847 0.007 0.000 0.007 0.000 sre_parse.py:132(__len__) - 293 0.002 0.000 0.007 0.000 queue.py:147(get) - 640 0.005 0.000 0.007 0.000 ordered_dict.py:117(keys) - 320 0.006 0.000 0.007 0.000 models.py:179(__init__) - 4930 0.007 0.000 0.007 0.000 {method 'strip' of 'str' objects} - 3890 0.007 0.000 0.007 0.000 {method 'items' of 'dict' objects} - 1281 0.006 0.000 0.007 0.000 {method 'encode' of 'str' objects} - 290 0.002 0.000 0.007 0.000 httplib.py:467(_check_close) - 1208 0.007 0.000 0.007 0.000 cookielib.py:848(__init__) - 1 0.004 0.004 0.006 0.006 __init__.py:4() - 1 0.003 0.003 0.006 0.006 argparse.py:76() - 5 0.000 0.000 0.006 0.001 scanner.py:65(decorator) - 320 0.003 0.000 0.006 0.000 utils.py:397(unquote_unreserved) - 320 0.004 0.000 0.006 0.000 utils.py:118(to_key_val_list) - 320 0.002 0.000 0.006 0.000 sessions.py:59(get_original_key) - 317 0.005 0.000 0.006 0.000 ordered_dict.py:55(__delitem__) - 2657 0.006 0.000 0.006 0.000 {method 'startswith' of 'str' objects} - 30 0.001 0.000 0.006 0.000 hub.py:282(switch_args) - 1600 0.005 0.000 0.006 0.000 httplib.py:765(_output) - 290 0.004 0.000 0.006 0.000 httplib.py:631(getheaders) - 320 0.006 0.000 0.006 0.000 greenlet.py:361(_report_result) - 610 0.006 0.000 0.006 0.000 {built-in method utcnow} - 2222 0.006 0.000 0.006 0.000 {built-in method acquire} - 1 0.003 0.003 0.005 0.005 tempfile.py:18() - 1 0.000 0.000 0.005 0.005 platform.py:1007(_syscmd_uname) - 1 0.003 0.003 0.005 0.005 io.py:35() - 1 0.003 0.003 0.005 0.005 __init__.py:24() - 1 0.000 0.000 0.005 0.005 argparse.py:1556(__init__) - 3 0.004 0.001 0.005 0.002 collections.py:13(namedtuple) - 4 0.000 0.000 0.005 0.001 platform.py:1288(system) - 7 0.000 0.000 0.005 0.001 platform.py:1151(uname) - 320 0.002 0.000 0.005 0.000 utils.py:43(super_len) - 320 0.003 0.000 0.005 0.000 util.py:44(__new__) - 2519 0.005 0.000 0.005 0.000 threading.py:64(_note) - 641 0.003 0.000 0.005 0.000 threading.py:221(_is_owned) - 610 0.004 0.000 0.005 0.000 socket.py:267(close) - 320 0.002 0.000 0.005 0.000 pool.py:201(discard) - 595 0.003 0.000 0.005 0.000 models.py:252(__init__) - 2647 0.005 0.000 0.005 0.000 {method 'tell' of 'cStringIO.StringO' objects} - 2381 0.005 0.000 0.005 0.000 {method 'sort' of 'list' objects} - 1864 0.005 0.000 0.005 0.000 {method 'setdefault' of 'dict' objects} - 1280 0.005 0.000 0.005 0.000 {method 'find' of 'unicode' objects} - 320 0.005 0.000 0.005 0.000 {built-in method split} - 290 0.003 0.000 0.005 0.000 {built-in method register} - 1 0.000 0.000 0.004 0.004 urllib2.py:803(AbstractBasicAuthHandler) - 1 0.004 0.004 0.004 0.004 socket.py:176(_socketobject) - 1 0.000 0.000 0.004 0.004 encoder.py:2() - 2 0.000 0.000 0.004 0.002 warnings.py:45(filterwarnings) - 1015 0.004 0.000 0.004 0.000 {sys.exc_clear} - 612 0.003 0.000 0.004 0.000 :1(fileno) - 1255 0.002 0.000 0.004 0.000 sre_parse.py:201(match) - 320 0.003 0.000 0.004 0.000 socket.py:237(__init__) - 320 0.002 0.000 0.004 0.000 sessions.py:485(get_adapter) - 293 0.002 0.000 0.004 0.000 queue.py:95(put) - 1837 0.004 0.000 0.004 0.000 {min} - 2671 0.004 0.000 0.004 0.000 {method 'upper' of 'str' objects} - 1237 0.004 0.000 0.004 0.000 {method 'split' of 'str' objects} - 2992 0.004 0.000 0.004 0.000 {method 'keys' of 'dict' objects} - 105 0.002 0.000 0.004 0.000 hub.py:270(switch) - 320 0.003 0.000 0.004 0.000 grequests.py:78(__init__) - 2967 0.004 0.000 0.004 0.000 {cStringIO.StringIO} - 320 0.002 0.000 0.004 0.000 cookielib.py:1253(_cookie_attrs) - 610 0.004 0.000 0.004 0.000 {_codecs.utf_8_decode} - 1 0.002 0.002 0.003 0.003 response.py:7() - 1 0.001 0.001 0.003 0.003 models.py:8() - 1 0.001 0.001 0.003 0.003 greenlet.py:3() - 1 0.000 0.000 0.003 0.003 api.py:12() - 3 0.003 0.001 0.003 0.001 {posix.popen} - 320 0.001 0.000 0.003 0.000 urlparse.py:198(urlunparse) - 1224 0.003 0.000 0.003 0.000 threading.py:59(__init__) - 860 0.002 0.000 0.003 0.000 sre_parse.py:144(append) - 17 0.003 0.000 0.003 0.000 sre_compile.py:264(_mk_bitmap) - 2032 0.003 0.000 0.003 0.000 rfc822.py:219(iscomment) - 2032 0.003 0.000 0.003 0.000 rfc822.py:209(islast) - 334 0.002 0.000 0.003 0.000 queue.py:80(qsize) - 640 0.002 0.000 0.003 0.000 Queue.py:237(_qsize) - 20 0.001 0.000 0.003 0.000 queue.py:193(_unlock) - 320 0.002 0.000 0.003 0.000 pool.py:47(discard) - 320 0.002 0.000 0.003 0.000 models.py:389(prepare_content_length) - 2352 0.003 0.000 0.003 0.000 {method 'read' of 'cStringIO.StringO' objects} - 2280 0.003 0.000 0.003 0.000 {method 'pop' of 'dict' objects} - 3484 0.003 0.000 0.003 0.000 {method 'isspace' of 'str' objects} - 672 0.003 0.000 0.003 0.000 {method 'format' of 'str' objects} - 7 0.002 0.000 0.003 0.000 __init__.py:959(_fixupParents) - 7 0.000 0.000 0.003 0.000 __init__.py:927(getLogger) - 7 0.000 0.000 0.003 0.000 __init__.py:1420(getLogger) - 1064 0.003 0.000 0.003 0.000 hub.py:115(get_hub) - 320 0.003 0.000 0.003 0.000 greenlet.py:236(start) - 30 0.001 0.000 0.003 0.000 connectionpool.py:189(_new_conn) - 320 0.002 0.000 0.003 0.000 adapters.py:77(cert_verify) - 16 0.001 0.000 0.003 0.000 abc.py:83(__new__) - 1 0.001 0.001 0.002 0.002 threading.py:1() - 1 0.001 0.001 0.002 0.002 ssl.py:56() - 1 0.001 0.001 0.002 0.002 six.py:1() - 1 0.001 0.001 0.002 0.002 sessions.py:10() - 1 0.000 0.000 0.002 0.002 re.py:134(match) - 1 0.001 0.001 0.002 0.002 Queue.py:1() - 1 0.000 0.000 0.002 0.002 poolmanager.py:7() - 1 0.002 0.002 0.002 0.002 mimetypes.py:324(_default_mime_types) - 1 0.000 0.000 0.002 0.002 mimetypes.py:23() - 1 0.002 0.002 0.002 0.002 httplib.py:67() - 1 0.000 0.000 0.002 0.002 cookielib.py:1201(CookieJar) - 1 0.002 0.002 0.002 0.002 calendar.py:6() - 1 0.000 0.000 0.002 0.002 argparse.py:2021(_match_arguments_partial) - 1 0.000 0.000 0.002 0.002 argparse.py:1880(consume_positionals) - 1 0.000 0.000 0.002 0.002 argparse.py:1735(_parse_known_args) - 1 0.000 0.000 0.002 0.002 argparse.py:1704(parse_known_args) - 1 0.000 0.000 0.002 0.002 argparse.py:1697(parse_args) - 3 0.000 0.000 0.002 0.001 sessions.py:188(__init__) - 3 0.000 0.000 0.002 0.001 poolmanager.py:61(_new_pool) - 3 0.000 0.000 0.002 0.001 grbrute.py:21(__init__) - 3 0.000 0.000 0.002 0.001 gettext.py:565(gettext) - 3 0.001 0.000 0.002 0.001 gettext.py:527(dgettext) - 3 0.000 0.000 0.002 0.001 gettext.py:461(translation) - 3 0.000 0.000 0.002 0.001 gettext.py:421(find) - 3 0.000 0.000 0.002 0.001 connectionpool.py:171(__init__) - 3 0.000 0.000 0.002 0.001 argparse.py:1190(__init__) - 46 0.000 0.000 0.002 0.000 urlparse.py:59(clear_cache) - 485 0.002 0.000 0.002 0.000 urlparse.py:303() - 320 0.002 0.000 0.002 0.000 urlparse.py:208(urlunsplit) - 485 0.002 0.000 0.002 0.000 urllib.py:1168() - 931 0.002 0.000 0.002 0.000 {time.time} - 1880 0.002 0.000 0.002 0.000 {thread.get_ident} - 1225 0.002 0.000 0.002 0.000 {thread.allocate_lock} - 693 0.002 0.000 0.002 0.000 {sys.exc_info} - 441 0.002 0.000 0.002 0.000 sre_parse.py:96(__init__) - 175 0.001 0.000 0.002 0.000 sre_compile.py:360(_simple) - 320 0.001 0.000 0.002 0.000 socket.py:276(__del__) - 290 0.001 0.000 0.002 0.000 rfc822.py:454(items) - 664 0.002 0.000 0.002 0.000 {range} - 320 0.001 0.000 0.002 0.000 Queue.py:243(_get) - 320 0.001 0.000 0.002 0.000 Queue.py:240(_put) - 320 0.001 0.000 0.002 0.000 models.py:267(prepare_method) - 640 0.002 0.000 0.002 0.000 {method 'update' of 'dict' objects} - 592 0.002 0.000 0.002 0.000 {method 'rotate' of 'collections.deque' objects} - 60 0.002 0.000 0.002 0.000 {method 'connect_ex' of '_socket.socket' objects} - 30 0.000 0.000 0.002 0.000 __init__.py:1046(info) - 918 0.002 0.000 0.002 0.000 hooks.py:20(default_hooks) - 320 0.001 0.000 0.002 0.000 greenlet.py:66(__call__) - 320 0.001 0.000 0.002 0.000 greenlet.py:30(__hash__) - 933 0.002 0.000 0.002 0.000 greenlet.py:160(ready) - 1759 0.002 0.000 0.002 0.000 {greenlet.getcurrent} - 320 0.002 0.000 0.002 0.000 cookielib.py:1246(_cookies_for_request) - 1768 0.002 0.000 0.002 0.000 {chr} - 1581 0.002 0.000 0.002 0.000 {built-in method release} - 290 0.002 0.000 0.002 0.000 {built-in method poll} - 320 0.002 0.000 0.002 0.000 abc.py:125(__instancecheck__) - 1 0.001 0.001 0.001 0.001 status_codes.py:3() - 1 0.001 0.001 0.001 0.001 ssl.py:58(SSLSocket) - 1 0.000 0.000 0.001 0.001 ssl.py:13() - 1 0.001 0.001 0.001 0.001 socket.py:199(socket) - 1 0.001 0.001 0.001 0.001 random.py:40() - 1 0.001 0.001 0.001 0.001 queue.py:16() - 1 0.000 0.000 0.001 0.001 pool.py:88(kill) - 1 0.000 0.000 0.001 0.001 pool.py:208(kill) - 1 0.001 0.001 0.001 0.001 netrc.py:1() - 1 0.000 0.000 0.001 0.001 hub.py:3() - 1 0.001 0.001 0.001 0.001 heapq.py:31() - 1 0.001 0.001 0.001 0.001 hashlib.py:55() - 1 0.001 0.001 0.001 0.001 exceptions.py:9() - 1 0.001 0.001 0.001 0.001 exceptions.py:10() - 1 0.000 0.000 0.001 0.001 cookies.py:7() - 1 0.000 0.000 0.001 0.001 _collections.py:7() - 1 0.001 0.001 0.001 0.001 collections.py:1() - 1 0.001 0.001 0.001 0.001 base64.py:3() - 1 0.000 0.000 0.001 0.001 auth.py:8() - 643 0.001 0.000 0.001 0.000 UserDict.py:17(__getitem__) - 320 0.001 0.000 0.001 0.000 urlparse.py:77(password) - 320 0.001 0.000 0.001 0.000 urlparse.py:67(username) - 30 0.000 0.000 0.001 0.000 timeout.py:100(start_new) - 147 0.001 0.000 0.001 0.000 sre_parse.py:263(_escape) - 130 0.001 0.000 0.001 0.000 sre_parse.py:231(_class_escape) - 64 0.000 0.000 0.001 0.000 sre_parse.py:184(__init__) - 108 0.001 0.000 0.001 0.000 sre_compile.py:480(isstring) - 350 0.001 0.000 0.001 0.000 socket.py:422(settimeout) - 320 0.001 0.000 0.001 0.000 socket.py:283(flush) - 274 0.001 0.000 0.001 0.000 {setattr} - 293 0.001 0.000 0.001 0.000 queue.py:59(_put) - 293 0.001 0.000 0.001 0.000 queue.py:56(_get) - 293 0.001 0.000 0.001 0.000 queue.py:229(_schedule_unlock) - 6 0.000 0.000 0.001 0.000 poolmanager.py:55(__init__) - 743 0.001 0.000 0.001 0.000 {ord} - 350 0.001 0.000 0.001 0.000 {method 'setblocking' of '_socket.socket' objects} - 641 0.001 0.000 0.001 0.000 {method 'rstrip' of 'str' objects} - 954 0.001 0.000 0.001 0.000 {method 'pop' of 'set' objects} - 320 0.001 0.000 0.001 0.000 {method 'pop' of 'list' objects} - 320 0.001 0.000 0.001 0.000 {method 'lower' of 'unicode' objects} - 578 0.001 0.000 0.001 0.000 {method 'index' of 'str' objects} - 642 0.001 0.000 0.001 0.000 {method 'fileno' of '_socket.socket' objects} - 358 0.001 0.000 0.001 0.000 {method 'extend' of 'list' objects} - 661 0.001 0.000 0.001 0.000 {method 'discard' of 'set' objects} - 289 0.001 0.000 0.001 0.000 {method 'count' of 'str' objects} - 275 0.001 0.000 0.001 0.000 {method 'copy' of 'dict' objects} - 46 0.001 0.000 0.001 0.000 {method 'clear' of 'dict' objects} - 367 0.001 0.000 0.001 0.000 {method 'cancel' of 'gevent.core.event' objects} - 360 0.001 0.000 0.001 0.000 {max} - 3 0.000 0.000 0.001 0.000 __init__.py:337(__init__) - 51/21 0.002 0.000 0.001 0.000 hub.py:296(get) - 875 0.001 0.000 0.001 0.000 httplib.py:502(isclosed) - 320 0.001 0.000 0.001 0.000 greenlet.py:23(__init__) - 320 0.001 0.000 0.001 0.000 greenlet.py:164(successful) - 693 0.001 0.000 0.001 0.000 {gevent.core.set_exc_info} - 6 0.000 0.000 0.001 0.000 gettext.py:130(_expand_lang) - 580 0.001 0.000 0.001 0.000 cookies.py:87(info) - 290 0.001 0.000 0.001 0.000 cookies.py:80(__init__) - 257 0.001 0.000 0.001 0.000 Cookie.py:308() - 610 0.001 0.000 0.001 0.000 cookielib.py:43(_debug) - 1253 0.001 0.000 0.001 0.000 {callable} - 320 0.001 0.000 0.001 0.000 {built-in method fromkeys} - 323 0.001 0.000 0.001 0.000 {built-in method __enter__} - 5 0.000 0.000 0.001 0.000 argparse.py:1271(add_argument) - 322 0.000 0.000 0.001 0.000 {any} - 341 0.001 0.000 0.001 0.000 {all} - 6 0.000 0.000 0.001 0.000 adapters.py:70(init_poolmanager) - 6 0.000 0.000 0.001 0.000 adapters.py:49(__init__) - 16 0.000 0.000 0.001 0.000 abc.py:86() - 1 0.000 0.000 0.000 0.000 {zip} - 3 0.000 0.000 0.000 0.000 warnings.py:361(__exit__) - 3 0.000 0.000 0.000 0.000 warnings.py:345(__enter__) - 3 0.000 0.000 0.000 0.000 warnings.py:324(__init__) - 2 0.000 0.000 0.000 0.000 warnings.py:14(warnpy3k) - 1 0.000 0.000 0.000 0.000 uuid.py:53(UUID) - 4 0.000 0.000 0.000 0.000 uuid.py:101(__init__) - 3 0.000 0.000 0.000 0.000 utils.py:493(default_headers) - 3 0.000 0.000 0.000 0.000 utils.py:462(default_user_agent) - 1 0.000 0.000 0.000 0.000 util.py:53(__init__) - 1 0.000 0.000 0.000 0.000 util.py:50(lazy_property) - 1 0.000 0.000 0.000 0.000 util.py:4(wrap_errors) - 1 0.000 0.000 0.000 0.000 util.py:4() - 1 0.000 0.000 0.000 0.000 util.py:37(Url) - 1 0.000 0.000 0.000 0.000 util.py:2() - 1 0.000 0.000 0.000 0.000 urlparse.py:64(ResultMixin) - 1 0.000 0.000 0.000 0.000 urlparse.py:115(ParseResult) - 1 0.000 0.000 0.000 0.000 urlparse.py:107(SplitResult) - 1 0.000 0.000 0.000 0.000 urllib.py:977(addinfourl) - 1 0.000 0.000 0.000 0.000 urllib.py:967(addinfo) - 1 0.000 0.000 0.000 0.000 urllib.py:952(addclosehook) - 1 0.000 0.000 0.000 0.000 urllib.py:923(addbase) - 1 0.000 0.000 0.000 0.000 urllib.py:845(ftpwrapper) - 1 0.000 0.000 0.000 0.000 urllib.py:615(FancyURLopener) - 1 0.000 0.000 0.000 0.000 urllib.py:115(URLopener) - 1 0.000 0.000 0.000 0.000 urllib.py:109(ContentTooShortError) - 1 0.000 0.000 0.000 0.000 urllib2.py:895(AbstractDigestAuthHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:867(ProxyBasicAuthHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:857(HTTPBasicAuthHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:793(HTTPPasswordMgrWithDefaultRealm) - 1 0.000 0.000 0.000 0.000 urllib2.py:729(HTTPPasswordMgr) - 1 0.000 0.000 0.000 0.000 urllib2.py:686(ProxyHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:520(HTTPRedirectHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:516(HTTPDefaultErrorHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:499(HTTPErrorProcessor) - 1 0.000 0.000 0.000 0.000 urllib2.py:480(BaseHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:297(OpenerDirector) - 1 0.000 0.000 0.000 0.000 urllib2.py:187(Request) - 1 0.000 0.000 0.000 0.000 urllib2.py:149(HTTPError) - 1 0.000 0.000 0.000 0.000 urllib2.py:136(URLError) - 1 0.000 0.000 0.000 0.000 urllib2.py:1369(CacheFTPHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1310(FTPHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1258(FileHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1200(UnknownHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1182(HTTPCookieProcessor) - 1 0.000 0.000 0.000 0.000 urllib2.py:1175(HTTPSHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1167(HTTPHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1065(AbstractHTTPHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1053(ProxyDigestAuthHandler) - 1 0.000 0.000 0.000 0.000 urllib2.py:1035(HTTPDigestAuthHandler) - 1 0.000 0.000 0.000 0.000 traceback.py:1() - 30 0.000 0.000 0.000 0.000 timeout.py:90(start) - 30 0.000 0.000 0.000 0.000 timeout.py:85(__init__) - 1 0.000 0.000 0.000 0.000 timeout.py:32(Timeout) - 1 0.000 0.000 0.000 0.000 timeout.py:14() - 30 0.000 0.000 0.000 0.000 timeout.py:128(cancel) - 30 0.000 0.000 0.000 0.000 timeout.py:120(pending) - 1 0.000 0.000 0.000 0.000 threading.py:99(_RLock) - 1 0.000 0.000 0.000 0.000 threading.py:783(_DummyThread) - 1 0.000 0.000 0.000 0.000 threading.py:752(_set_daemon) - 1 0.000 0.000 0.000 0.000 threading.py:744(__init__) - 1 0.000 0.000 0.000 0.000 threading.py:742(_MainThread) - 1 0.000 0.000 0.000 0.000 threading.py:713(_Timer) - 1 0.000 0.000 0.000 0.000 threading.py:57(_Verbose) - 1 0.000 0.000 0.000 0.000 threading.py:510(_set_ident) - 1 0.000 0.000 0.000 0.000 threading.py:426(__init__) - 1 0.000 0.000 0.000 0.000 threading.py:414(Thread) - 1 0.000 0.000 0.000 0.000 threading.py:376(set) - 1 0.000 0.000 0.000 0.000 threading.py:366(__init__) - 1 0.000 0.000 0.000 0.000 threading.py:362(_Event) - 1 0.000 0.000 0.000 0.000 threading.py:359(Event) - 1 0.000 0.000 0.000 0.000 threading.py:347(_BoundedSemaphore) - 1 0.000 0.000 0.000 0.000 threading.py:299(_Semaphore) - 1 0.000 0.000 0.000 0.000 threading.py:290(notifyAll) - 11 0.000 0.000 0.000 0.000 threading.py:181(__init__) - 1 0.000 0.000 0.000 0.000 threading.py:179(_Condition) - 11 0.000 0.000 0.000 0.000 threading.py:176(Condition) - 1 0.000 0.000 0.000 0.000 tempfile.py:483(SpooledTemporaryFile) - 1 0.000 0.000 0.000 0.000 tempfile.py:357(_TemporaryFileWrapper) - 1 0.000 0.000 0.000 0.000 tempfile.py:107(_RandomNameSequence) - 4 0.000 0.000 0.000 0.000 {sys._getframe} - 1 0.000 0.000 0.000 0.000 structures.py:9() - 1 0.000 0.000 0.000 0.000 structures.py:78(__init__) - 1 0.000 0.000 0.000 0.000 structures.py:75(LookupDict) - 1 0.000 0.000 0.000 0.000 structures.py:36(CaseInsensitiveDict) - 1 0.000 0.000 0.000 0.000 structures.py:15(IteratorProxy) - 20 0.000 0.000 0.000 0.000 {_struct.calcsize} - 20 0.000 0.000 0.000 0.000 string.py:364(rfind) - 1 0.000 0.000 0.000 0.000 string.py:281(split) - 1 0.000 0.000 0.000 0.000 string.py:248(strip) - 1 0.000 0.000 0.000 0.000 string.py:220(lower) - 1 0.000 0.000 0.000 0.000 stringprep.py:6() - 1 0.000 0.000 0.000 0.000 StringIO.py:42(StringIO) - 1 0.000 0.000 0.000 0.000 StringIO.py:30() - 1 0.000 0.000 0.000 0.000 :1(Url) - 1 0.000 0.000 0.000 0.000 :1(SplitResult) - 1 0.000 0.000 0.000 0.000 :1(ParseResult) - 1 0.000 0.000 0.000 0.000 ssl.py:83(SSLSocket) - 1 0.000 0.000 0.000 0.000 sre_parse.py:91(checkgroup) - 90 0.000 0.000 0.000 0.000 sre_parse.py:89(closegroup) - 90 0.000 0.000 0.000 0.000 sre_parse.py:78(opengroup) - 66 0.000 0.000 0.000 0.000 sre_parse.py:73(__init__) - 4 0.000 0.000 0.000 0.000 sre_parse.py:222(isname) - 12 0.000 0.000 0.000 0.000 sre_parse.py:216(isident) - 3 0.000 0.000 0.000 0.000 sre_parse.py:213(seek) - 11 0.000 0.000 0.000 0.000 sre_parse.py:211(tell) - 185 0.000 0.000 0.000 0.000 sre_parse.py:140(__setitem__) - 4 0.000 0.000 0.000 0.000 sre_parse.py:134(__delitem__) - 161 0.000 0.000 0.000 0.000 {_sre.getlower} - 20 0.000 0.000 0.000 0.000 sre_compile.py:57(fixup) - 318 0.000 0.000 0.000 0.000 sre_compile.py:24(_identityfunction) - 55 0.000 0.000 0.000 0.000 {_sre.compile} - 30 0.000 0.000 0.000 0.000 socket.py:579(gethostbyname) - 30/1 0.001 0.000 0.000 0.000 socket.py:534(create_connection) - 30/1 0.087 0.003 0.000 0.000 socket.py:269(connect) - 1 0.000 0.000 0.000 0.000 socket.py:226(_fileobject) - 1 0.000 0.000 0.000 0.000 socket.py:186(_closedsocket) - 1 0.000 0.000 0.000 0.000 socket.py:164(_closedsocket) - 30/1 0.000 0.000 0.000 0.000 socket.py:154(wait_readwrite) - 322/1 0.004 0.000 0.000 0.000 socket.py:136(wait_read) - 30 0.000 0.000 0.000 0.000 {_socket.inet_ntop} - 350 0.000 0.000 0.000 0.000 {_socket.getdefaulttimeout} - 31 0.000 0.000 0.000 0.000 six.py:93(__init__) - 1 0.000 0.000 0.000 0.000 six.py:91(MovedModule) - 1 0.000 0.000 0.000 0.000 six.py:83(__get__) - 40 0.000 0.000 0.000 0.000 six.py:80(__init__) - 1 0.000 0.000 0.000 0.000 six.py:78(_LazyDescr) - 1 0.000 0.000 0.000 0.000 six.py:72(_import_module) - 4 0.000 0.000 0.000 0.000 six.py:67(_add_doc) - 1 0.000 0.000 0.000 0.000 six.py:54(__len__) - 1 0.000 0.000 0.000 0.000 six.py:53(X) - 1 0.000 0.000 0.000 0.000 six.py:317(exec_) - 1 0.000 0.000 0.000 0.000 six.py:247(Iterator) - 1 0.000 0.000 0.000 0.000 six.py:132(_MovedItems) - 1 0.000 0.000 0.000 0.000 six.py:126(_resolve) - 9 0.000 0.000 0.000 0.000 six.py:108(__init__) - 1 0.000 0.000 0.000 0.000 six.py:106(MovedAttribute) - 1 0.000 0.000 0.000 0.000 shlex.py:2() - 1 0.000 0.000 0.000 0.000 shlex.py:21(shlex) - 1 0.000 0.000 0.000 0.000 sessions.py:81(SessionRedirectMixin) - 6 0.000 0.000 0.000 0.000 sessions.py:500(mount) - 1 0.000 0.000 0.000 0.000 sessions.py:170(Session) - 290 0.000 0.000 0.000 0.000 {select.poll} - 5 0.000 0.000 0.000 0.000 scanner.py:64(pattern) - 1 0.000 0.000 0.000 0.000 scanner.py:3() - 1 0.000 0.000 0.000 0.000 scanner.py:17(Scanner) - 1 0.000 0.000 0.000 0.000 rfc822.py:85(Message) - 1 0.000 0.000 0.000 0.000 rfc822.py:770(AddressList) - 1 0.000 0.000 0.000 0.000 rfc822.py:71() - 1 0.000 0.000 0.000 0.000 rfc822.py:496(AddrlistClass) - 1 0.000 0.000 0.000 0.000 response.py:32(HTTPResponse) - 9 0.000 0.000 0.000 0.000 request.py:50(__init__) - 1 0.000 0.000 0.000 0.000 request.py:18(RequestMethods) - 2 0.000 0.000 0.000 0.000 re.py:206(escape) - 3 0.000 0.000 0.000 0.000 {repr} - 1 0.000 0.000 0.000 0.000 random.py:99(seed) - 1 0.000 0.000 0.000 0.000 random.py:90(__init__) - 1 0.000 0.000 0.000 0.000 random.py:793(SystemRandom) - 1 0.000 0.000 0.000 0.000 random.py:71(Random) - 1 0.000 0.000 0.000 0.000 random.py:643(WichmannHill) - 1 0.000 0.000 0.000 0.000 Queue.py:9(Empty) - 7 0.000 0.000 0.000 0.000 queue.py:53(_init) - 7 0.000 0.000 0.000 0.000 queue.py:41(__init__) - 1 0.000 0.000 0.000 0.000 queue.py:31(Queue) - 1 0.000 0.000 0.000 0.000 queue.py:272(JoinableQueue) - 1 0.000 0.000 0.000 0.000 queue.py:259(LifoQueue) - 1 0.000 0.000 0.000 0.000 queue.py:243(PriorityQueue) - 1 0.000 0.000 0.000 0.000 queue.py:235(ItemWaiter) - 3 0.000 0.000 0.000 0.000 Queue.py:234(_init) - 1 0.000 0.000 0.000 0.000 Queue.py:231(LifoQueue) - 3 0.000 0.000 0.000 0.000 Queue.py:22(__init__) - 1 0.000 0.000 0.000 0.000 Queue.py:212(PriorityQueue) - 1 0.000 0.000 0.000 0.000 Queue.py:17(Queue) - 1 0.000 0.000 0.000 0.000 Queue.py:13(Full) - 1 0.000 0.000 0.000 0.000 pprint.py:81(PrettyPrinter) - 1 0.000 0.000 0.000 0.000 pprint.py:35() - 1 0.000 0.000 0.000 0.000 pphidden_async.py:8(__init__) - 1 0.000 0.000 0.000 0.000 pphidden_async.py:7(Pp_url) - 3 0.000 0.000 0.000 0.000 {posix.uname} - 1 0.000 0.000 0.000 0.000 {posix.read} - 13 0.000 0.000 0.000 0.000 posixpath.py:59(join) - 1 0.000 0.000 0.000 0.000 posixpath.py:42(normcase) - 1 0.000 0.000 0.000 0.000 posixpath.py:117(dirname) - 1 0.000 0.000 0.000 0.000 posixpath.py:109(basename) - 1 0.000 0.000 0.000 0.000 {posix.open} - 1 0.000 0.000 0.000 0.000 {posix.close} - 1 0.000 0.000 0.000 0.000 pool.py:3() - 1 0.000 0.000 0.000 0.000 pool.py:220(pass_value) - 1 0.000 0.000 0.000 0.000 pool.py:18(__init__) - 1 0.000 0.000 0.000 0.000 pool.py:174(__init__) - 1 0.000 0.000 0.000 0.000 pool.py:172(Pool) - 1 0.000 0.000 0.000 0.000 pool.py:11(GreenletSet) - 1 0.000 0.000 0.000 0.000 poolmanager.py:27(PoolManager) - 1 0.000 0.000 0.000 0.000 poolmanager.py:147(ProxyManager) - 1 0.000 0.000 0.000 0.000 platform.py:390(_popen) - 3 0.000 0.000 0.000 0.000 platform.py:1479(python_version) - 3 0.000 0.000 0.000 0.000 platform.py:1467(python_implementation) - 6 0.000 0.000 0.000 0.000 platform.py:1364(_sys_version) - 3 0.000 0.000 0.000 0.000 platform.py:1307(release) - 1 0.000 0.000 0.000 0.000 os.py:747(urandom) - 1 0.000 0.000 0.000 0.000 os.py:35(_get_exports_list) - 1 0.000 0.000 0.000 0.000 ordered_dict.py:6() - 1 0.000 0.000 0.000 0.000 ordered_dict.py:17(OrderedDict) - 1 0.000 0.000 0.000 0.000 netrc.py:22(netrc) - 1 0.000 0.000 0.000 0.000 netrc.py:10(NetrcParseError) - 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:8(MozillaCookieJar) - 1 0.000 0.000 0.000 0.000 _MozillaCookieJar.py:1() - 1 0.000 0.000 0.000 0.000 monkey.py:8(patch_os) - 1 0.000 0.000 0.000 0.000 monkey.py:68(patch_ssl) - 1 0.000 0.000 0.000 0.000 monkey.py:61(patch_dns) - 1 0.000 0.000 0.000 0.000 monkey.py:3() - 1 0.000 0.000 0.000 0.000 monkey.py:17(patch_time) - 1 0.000 0.000 0.000 0.000 models.py:442(Response) - 1 0.000 0.000 0.000 0.000 models.py:36(RequestEncodingMixin) - 1 0.000 0.000 0.000 0.000 models.py:233(PreparedRequest) - 1 0.000 0.000 0.000 0.000 models.py:156(Request) - 1 0.000 0.000 0.000 0.000 models.py:135(RequestHooksMixin) - 1 0.000 0.000 0.000 0.000 mimetypes.py:50(MimeTypes) - 1 0.000 0.000 0.000 0.000 mimetools.py:20(Message) - 4 0.000 0.000 0.000 0.000 {method 'write' of 'cStringIO.StringO' objects} - 5 0.000 0.000 0.000 0.000 {method 'translate' of 'str' objects} - 2 0.000 0.000 0.000 0.000 {method 'tostring' of 'array.array' objects} - 1 0.000 0.000 0.000 0.000 {method 'toordinal' of 'datetime.date' objects} - 2 0.000 0.000 0.000 0.000 {method 'tolist' of 'array.array' objects} - 2 0.000 0.000 0.000 0.000 {method 'setter' of 'property' objects} - 22 0.000 0.000 0.000 0.000 {method 'rfind' of 'str' objects} - 6 0.000 0.000 0.000 0.000 {method 'reverse' of 'list' objects} - 32 0.000 0.000 0.000 0.000 {method 'replace' of 'str' objects} - 90 0.000 0.000 0.000 0.000 {method 'remove' of 'list' objects} - 293 0.000 0.000 0.000 0.000 {method 'popleft' of 'collections.deque' objects} - 1 0.000 0.000 0.000 0.000 {method 'lstrip' of 'str' objects} - 320 0.000 0.000 0.000 0.000 {method 'iteritems' of 'dict' objects} - 254 0.000 0.000 0.000 0.000 {method 'isupper' of 'str' objects} - 21 0.000 0.000 0.000 0.000 {method 'isdigit' of 'str' objects} - 124 0.000 0.000 0.000 0.000 {method 'isalnum' of 'str' objects} - 5 0.000 0.000 0.000 0.000 {method 'insert' of 'list' objects} - 2 0.000 0.000 0.000 0.000 {method 'getvalue' of 'cStringIO.StringO' objects} - 60 0.000 0.000 0.000 0.000 {method 'getsockopt' of '_socket.socket' objects} - 37 0.000 0.000 0.000 0.000 {method 'endswith' of 'str' objects} - 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects} - 4 0.000 0.000 0.000 0.000 {method 'count' of 'list' objects} - 21 0.000 0.000 0.000 0.000 {method '__contains__' of 'frozenset' objects} - 1 0.000 0.000 0.000 0.000 {method 'close' of 'file' objects} - 1 0.000 0.000 0.000 0.000 {method 'clear' of 'collections.deque' objects} - 296 0.000 0.000 0.000 0.000 {method 'append' of 'collections.deque' objects} - 1 0.000 0.000 0.000 0.000 {math.sqrt} - 2 0.000 0.000 0.000 0.000 {math.log} - 1 0.000 0.000 0.000 0.000 {math.exp} - 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:49(LWPCookieJar) - 1 0.000 0.000 0.000 0.000 _LWPCookieJar.py:12() - 4 0.000 0.000 0.000 0.000 {locals} - 6 0.000 0.000 0.000 0.000 locale.py:316(normalize) - 1 0.000 0.000 0.000 0.000 keyword.py:11() - 1 0.000 0.000 0.000 0.000 {iter} - 2 0.000 0.000 0.000 0.000 {issubclass} - 1 0.000 0.000 0.000 0.000 io.py:907(BufferedReader) - 1 0.000 0.000 0.000 0.000 io.py:900(BytesIO) - 1 0.000 0.000 0.000 0.000 io.py:789(_BytesIO) - 1 0.000 0.000 0.000 0.000 io.py:72(BlockingIOError) - 1 0.000 0.000 0.000 0.000 io.py:715(_BufferedIOMixin) - 1 0.000 0.000 0.000 0.000 io.py:643(BufferedIOBase) - 1 0.000 0.000 0.000 0.000 io.py:621(FileIO) - 1 0.000 0.000 0.000 0.000 io.py:566(RawIOBase) - 1 0.000 0.000 0.000 0.000 io.py:294(IOBase) - 1 0.000 0.000 0.000 0.000 io.py:290(UnsupportedOperation) - 1 0.000 0.000 0.000 0.000 io.py:276(OpenWrapper) - 1 0.000 0.000 0.000 0.000 io.py:267(_DocDescriptor) - 1 0.000 0.000 0.000 0.000 io.py:1880(StringIO) - 1 0.000 0.000 0.000 0.000 io.py:1379(TextIOWrapper) - 1 0.000 0.000 0.000 0.000 io.py:1303(IncrementalNewlineDecoder) - 1 0.000 0.000 0.000 0.000 io.py:1255(TextIOBase) - 1 0.000 0.000 0.000 0.000 io.py:1187(BufferedRandom) - 1 0.000 0.000 0.000 0.000 io.py:1121(BufferedRWPair) - 1 0.000 0.000 0.000 0.000 io.py:1032(BufferedWriter) - 2 0.000 0.000 0.000 0.000 __init__.py:983(_fixupChildren) - 1 0.000 0.000 0.000 0.000 __init__.py:918(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:913(Manager) - 10 0.000 0.000 0.000 0.000 __init__.py:879(append) - 3 0.000 0.000 0.000 0.000 __init__.py:872(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:866(PlaceHolder) - 1 0.000 0.000 0.000 0.000 __init__.py:806(FileHandler) - 1 0.000 0.000 0.000 0.000 __init__.py:7(CertificateError) - 3 0.000 0.000 0.000 0.000 __init__.py:78(CFUNCTYPE) - 1 0.000 0.000 0.000 0.000 __init__.py:739(StreamHandler) - 1 0.000 0.000 0.000 0.000 __init__.py:67(NullHandler) - 2 0.000 0.000 0.000 0.000 __init__.py:614(createLock) - 2 0.000 0.000 0.000 0.000 __init__.py:597(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:588(Handler) - 10 0.000 0.000 0.000 0.000 __init__.py:546(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:541(Filterer) - 1 0.000 0.000 0.000 0.000 __init__.py:504(Filter) - 5 0.000 0.000 0.000 0.000 __init__.py:49(normalize_encoding) - 3 0.000 0.000 0.000 0.000 __init__.py:481(CFunctionType) - 3 0.000 0.000 0.000 0.000 __init__.py:480(PYFUNCTYPE) - 1 0.000 0.000 0.000 0.000 __init__.py:462(BufferingFormatter) - 2 0.000 0.000 0.000 0.000 __init__.py:417(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:416(LibraryLoader) - 1 0.000 0.000 0.000 0.000 __init__.py:376(PyDLL) - 4 0.000 0.000 0.000 0.000 __init__.py:370(__getitem__) - 1 0.000 0.000 0.000 0.000 __init__.py:368(__init__) - 4 0.000 0.000 0.000 0.000 __init__.py:363(__getattr__) - 1 0.000 0.000 0.000 0.000 __init__.py:34(NullHandler) - 3 0.000 0.000 0.000 0.000 __init__.py:347(_FuncPtr) - 1 0.000 0.000 0.000 0.000 __init__.py:324(Formatter) - 1 0.000 0.000 0.000 0.000 __init__.py:320(CDLL) - 1 0.000 0.000 0.000 0.000 __init__.py:278(c_wchar) - 1 0.000 0.000 0.000 0.000 __init__.py:275(c_wchar_p) - 1 0.000 0.000 0.000 0.000 __init__.py:260(c_bool) - 1 0.000 0.000 0.000 0.000 __init__.py:255(c_void_p) - 1 0.000 0.000 0.000 0.000 __init__.py:243(c_char_p) - 1 0.000 0.000 0.000 0.000 __init__.py:238(c_char) - 1 0.000 0.000 0.000 0.000 __init__.py:233(c_byte) - 1 0.000 0.000 0.000 0.000 __init__.py:226(c_ubyte) - 1 0.000 0.000 0.000 0.000 __init__.py:214(LogRecord) - 1 0.000 0.000 0.000 0.000 __init__.py:205(c_longdouble) - 9 0.000 0.000 0.000 0.000 __init__.py:203(_releaseLock) - 1 0.000 0.000 0.000 0.000 __init__.py:201(c_double) - 1 0.000 0.000 0.000 0.000 __init__.py:197(c_float) - 9 0.000 0.000 0.000 0.000 __init__.py:194(_acquireLock) - 1 0.000 0.000 0.000 0.000 __init__.py:193(c_uint) - 1 0.000 0.000 0.000 0.000 __init__.py:18() - 1 0.000 0.000 0.000 0.000 __init__.py:189(c_int) - 1 0.000 0.000 0.000 0.000 __init__.py:180(c_ulong) - 1 0.000 0.000 0.000 0.000 __init__.py:176(c_long) - 1 0.000 0.000 0.000 0.000 __init__.py:172(c_ushort) - 1 0.000 0.000 0.000 0.000 __init__.py:168(c_short) - 1 0.000 0.000 0.000 0.000 __init__.py:159(py_object) - 14 0.000 0.000 0.000 0.000 __init__.py:147(_check_size) - 1 0.000 0.000 0.000 0.000 __init__.py:1266(LoggerAdapter) - 1 0.000 0.000 0.000 0.000 __init__.py:1258(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:1252(RootLogger) - 2 0.000 0.000 0.000 0.000 __init__.py:1185(addHandler) - 3 0.000 0.000 0.000 0.000 __init__.py:104(CFunctionType) - 8 0.000 0.000 0.000 0.000 __init__.py:1016(__init__) - 1 0.000 0.000 0.000 0.000 __init__.py:1001(Logger) - 1 0.000 0.000 0.000 0.000 idna.py:279(getregentry) - 1 0.000 0.000 0.000 0.000 idna.py:274(StreamReader) - 1 0.000 0.000 0.000 0.000 idna.py:271(StreamWriter) - 1 0.000 0.000 0.000 0.000 idna.py:231(IncrementalDecoder) - 1 0.000 0.000 0.000 0.000 idna.py:197(IncrementalEncoder) - 1 0.000 0.000 0.000 0.000 idna.py:146(Codec) - 1 0.000 0.000 0.000 0.000 hub.py:95(signal) - 290/1 0.010 0.000 0.000 0.000 hub.py:61(sleep) - 1 0.000 0.000 0.000 0.000 hub.py:317(_NONE) - 106 0.000 0.000 0.000 0.000 hub.py:243(__init__) - 1 0.000 0.000 0.000 0.000 hub.py:207(Waiter) - 1 0.000 0.000 0.000 0.000 hub.py:200(DispatchExit) - 693/2 0.025 0.000 0.000 0.000 hub.py:142(switch) - 1 0.000 0.000 0.000 0.000 hub.py:138(__init__) - 1 0.000 0.000 0.000 0.000 hub.py:132(Hub) - 30/1 0.000 0.000 0.000 0.000 httplib.py:717(connect) - 30 0.000 0.000 0.000 0.000 httplib.py:678(_set_hostport) - 30 0.000 0.000 0.000 0.000 httplib.py:649(__init__) - 1 0.000 0.000 0.000 0.000 httplib.py:638(HTTPConnection) - 1 0.000 0.000 0.000 0.000 httplib.py:319(HTTPResponse) - 1 0.000 0.000 0.000 0.000 httplib.py:214(HTTPMessage) - 1 0.000 0.000 0.000 0.000 httplib.py:1209(LineAndFileWrapper) - 1 0.000 0.000 0.000 0.000 httplib.py:1201(BadStatusLine) - 1 0.000 0.000 0.000 0.000 httplib.py:1198(ResponseNotReady) - 1 0.000 0.000 0.000 0.000 httplib.py:1195(CannotSendHeader) - 1 0.000 0.000 0.000 0.000 httplib.py:1192(CannotSendRequest) - 1 0.000 0.000 0.000 0.000 httplib.py:1189(ImproperConnectionState) - 1 0.000 0.000 0.000 0.000 httplib.py:1175(IncompleteRead) - 1 0.000 0.000 0.000 0.000 httplib.py:1172(UnimplementedFileMode) - 1 0.000 0.000 0.000 0.000 httplib.py:1169(UnknownTransferEncoding) - 1 0.000 0.000 0.000 0.000 httplib.py:1164(UnknownProtocol) - 1 0.000 0.000 0.000 0.000 httplib.py:1161(InvalidURL) - 1 0.000 0.000 0.000 0.000 httplib.py:1158(NotConnected) - 1 0.000 0.000 0.000 0.000 httplib.py:1153(HTTPException) - 1 0.000 0.000 0.000 0.000 httplib.py:1120(HTTPS) - 1 0.000 0.000 0.000 0.000 httplib.py:1098(HTTPSConnection) - 1 0.000 0.000 0.000 0.000 httplib.py:1004(HTTP) - 1 0.000 0.000 0.000 0.000 hooks.py:14() - 10 0.000 0.000 0.000 0.000 hashlib.py:109() - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha512} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha384} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha256} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha224} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_sha1} - 1 0.000 0.000 0.000 0.000 {_hashlib.openssl_md5} - 320 0.000 0.000 0.000 0.000 {hash} - 1 0.000 0.000 0.000 0.000 gzip.py:4() - 1 0.000 0.000 0.000 0.000 gzip.py:35(GzipFile) - 1 0.000 0.000 0.000 0.000 grequests.py:69(AsyncRequest) - 1 0.000 0.000 0.000 0.000 greenlet.py:71(GreenletLink) - 1 0.000 0.000 0.000 0.000 greenlet.py:59(FailureSpawnedLink) - 1 0.000 0.000 0.000 0.000 greenlet.py:568(LinkedFailed) - 1 0.000 0.000 0.000 0.000 greenlet.py:555(LinkedKilled) - 1 0.000 0.000 0.000 0.000 greenlet.py:544(LinkedCompleted) - 1 0.000 0.000 0.000 0.000 greenlet.py:540(LinkedExited) - 1 0.000 0.000 0.000 0.000 greenlet.py:47(SuccessSpawnedLink) - 60 0.000 0.000 0.000 0.000 greenlet.py:284(kill) - 1 0.000 0.000 0.000 0.000 greenlet.py:16(SpawnedLink) - 1 0.000 0.000 0.000 0.000 greenlet.py:140(Greenlet) - 1 0.000 0.000 0.000 0.000 greenlet.py:127(FailureGreenletLink) - 1 0.000 0.000 0.000 0.000 greenlet.py:114(SuccessGreenletLink) - 1 0.000 0.000 0.000 0.000 grbrute.py:42(Grbrute) - 1 0.000 0.000 0.000 0.000 grbrute.py:20(SessionQueue) - 247 0.000 0.000 0.000 0.000 {globals} - 1 0.000 0.000 0.000 0.000 {gevent.core.dns_init} - 7 0.000 0.000 0.000 0.000 __future__.py:75(__init__) - 1 0.000 0.000 0.000 0.000 __future__.py:74(_Feature) - 1 0.000 0.000 0.000 0.000 __future__.py:48() - 1 0.000 0.000 0.000 0.000 {function seed at 0x1d496e0} - 2 0.000 0.000 0.000 0.000 {filter} - 1 0.000 0.000 0.000 0.000 exceptions.py:80(LocationParseError) - 1 0.000 0.000 0.000 0.000 exceptions.py:75(ClosedPoolError) - 1 0.000 0.000 0.000 0.000 exceptions.py:70(EmptyPoolError) - 1 0.000 0.000 0.000 0.000 exceptions.py:65(TimeoutError) - 1 0.000 0.000 0.000 0.000 exceptions.py:54(InvalidURL) - 1 0.000 0.000 0.000 0.000 exceptions.py:54(HostChangedError) - 1 0.000 0.000 0.000 0.000 exceptions.py:50(InvalidSchema) - 1 0.000 0.000 0.000 0.000 exceptions.py:46(MissingSchema) - 1 0.000 0.000 0.000 0.000 exceptions.py:42(TooManyRedirects) - 1 0.000 0.000 0.000 0.000 exceptions.py:38(URLRequired) - 1 0.000 0.000 0.000 0.000 exceptions.py:38(MaxRetryError) - 1 0.000 0.000 0.000 0.000 exceptions.py:34(Timeout) - 1 0.000 0.000 0.000 0.000 exceptions.py:31(DecodeError) - 1 0.000 0.000 0.000 0.000 exceptions.py:30(SSLError) - 1 0.000 0.000 0.000 0.000 exceptions.py:26(SSLError) - 1 0.000 0.000 0.000 0.000 exceptions.py:26(ConnectionError) - 1 0.000 0.000 0.000 0.000 exceptions.py:17(HTTPError) - 1 0.000 0.000 0.000 0.000 exceptions.py:15(PoolError) - 1 0.000 0.000 0.000 0.000 exceptions.py:12(RequestException) - 1 0.000 0.000 0.000 0.000 exceptions.py:10(HTTPError) - 1 0.000 0.000 0.000 0.000 _endian.py:4() - 1 0.000 0.000 0.000 0.000 _endian.py:45(BigEndianStructure) - 1 0.000 0.000 0.000 0.000 _endian.py:22(_swapped_meta) - 1 0.000 0.000 0.000 0.000 encoder.py:87(JSONEncoder) - 1 0.000 0.000 0.000 0.000 encoder.py:119(__init__) - 1 0.000 0.000 0.000 0.000 dns.py:7() - 30/1 0.000 0.000 0.000 0.000 dns.py:46(resolve_ipv4) - 1 0.000 0.000 0.000 0.000 dns.py:27(DNSError) - 2 0.000 0.000 0.000 0.000 {dir} - 1 0.000 0.000 0.000 0.000 {delattr} - 1 0.000 0.000 0.000 0.000 decoder.py:276(__init__) - 38 0.000 0.000 0.000 0.000 {_ctypes.sizeof} - 1 0.000 0.000 0.000 0.000 {_ctypes.set_conversion_mode} - 2 0.000 0.000 0.000 0.000 {_ctypes.POINTER} - 3 0.000 0.000 0.000 0.000 {_ctypes.dlopen} - 1 0.000 0.000 0.000 0.000 cookies.py:73(MockResponse) - 320 0.000 0.000 0.000 0.000 cookies.py:65(get_new_headers) - 1 0.000 0.000 0.000 0.000 cookies.py:20(MockRequest) - 1 0.000 0.000 0.000 0.000 cookies.py:136(RequestsCookieJar) - 1 0.000 0.000 0.000 0.000 cookies.py:131(CookieConflictError) - 1 0.000 0.000 0.000 0.000 Cookie.py:705(SmartCookie) - 1 0.000 0.000 0.000 0.000 Cookie.py:679(SerialCookie) - 1 0.000 0.000 0.000 0.000 Cookie.py:665(SimpleCookie) - 1 0.000 0.000 0.000 0.000 Cookie.py:549(BaseCookie) - 1 0.000 0.000 0.000 0.000 Cookie.py:403(Morsel) - 1 0.000 0.000 0.000 0.000 Cookie.py:232(CookieError) - 1 0.000 0.000 0.000 0.000 cookielib.py:838(DefaultCookiePolicy) - 1 0.000 0.000 0.000 0.000 cookielib.py:805(CookiePolicy) - 1 0.000 0.000 0.000 0.000 cookielib.py:707(Cookie) - 1 0.000 0.000 0.000 0.000 cookielib.py:1733(FileCookieJar) - 1 0.000 0.000 0.000 0.000 cookielib.py:1731(LoadError) - 1 0.000 0.000 0.000 0.000 cookielib.py:1199(Absent) - 1 0.000 0.000 0.000 0.000 connectionpool.py:74(VerifiedHTTPSConnection) - 1 0.000 0.000 0.000 0.000 connectionpool.py:497(HTTPSConnectionPool) - 1 0.000 0.000 0.000 0.000 connectionpool.py:130(HTTPConnectionPool) - 3 0.000 0.000 0.000 0.000 connectionpool.py:121(__init__) - 1 0.000 0.000 0.000 0.000 connectionpool.py:112(ConnectionPool) - 21 0.000 0.000 0.000 0.000 collections.py:61() - 21 0.000 0.000 0.000 0.000 collections.py:60() - 3 0.000 0.000 0.000 0.000 _collections.py:52(__setitem__) - 145 0.000 0.000 0.000 0.000 collections.py:43() - 6 0.000 0.000 0.000 0.000 _collections.py:38(__init__) - 1 0.000 0.000 0.000 0.000 _collections.py:22(RecentlyUsedContainer) - 2 0.000 0.000 0.000 0.000 codecs.py:77(__new__) - 1 0.000 0.000 0.000 0.000 {_codecs.lookup} - 1 0.000 0.000 0.000 0.000 cgi.py:857(FormContent) - 1 0.000 0.000 0.000 0.000 cgi.py:829(InterpFormContentDict) - 1 0.000 0.000 0.000 0.000 cgi.py:795(SvFormContentDict) - 1 0.000 0.000 0.000 0.000 cgi.py:775(FormContentDict) - 1 0.000 0.000 0.000 0.000 cgi.py:353(FieldStorage) - 1 0.000 0.000 0.000 0.000 cgi.py:328(MiniFieldStorage) - 1 0.000 0.000 0.000 0.000 certs.py:18(where) - 1 0.000 0.000 0.000 0.000 certs.py:13() - 2 0.000 0.000 0.000 0.000 calendar.py:71(__init__) - 1 0.000 0.000 0.000 0.000 calendar.py:66(_localized_day) - 1 0.000 0.000 0.000 0.000 calendar.py:531(LocaleHTMLCalendar) - 2 0.000 0.000 0.000 0.000 calendar.py:52(__init__) - 1 0.000 0.000 0.000 0.000 calendar.py:496(LocaleTextCalendar) - 1 0.000 0.000 0.000 0.000 calendar.py:484(TimeEncoding) - 1 0.000 0.000 0.000 0.000 calendar.py:47(_localized_month) - 1 0.000 0.000 0.000 0.000 calendar.py:372(HTMLCalendar) - 1 0.000 0.000 0.000 0.000 calendar.py:28(IllegalWeekdayError) - 1 0.000 0.000 0.000 0.000 calendar.py:255(TextCalendar) - 1 0.000 0.000 0.000 0.000 calendar.py:21(IllegalMonthError) - 1 0.000 0.000 0.000 0.000 calendar.py:138(setfirstweekday) - 1 0.000 0.000 0.000 0.000 calendar.py:132(__init__) - 1 0.000 0.000 0.000 0.000 calendar.py:126(Calendar) - 65 0.000 0.000 0.000 0.000 {built-in method match} - 2 0.000 0.000 0.000 0.000 {built-in method groups} - 2 0.000 0.000 0.000 0.000 {built-in method group} - 1 0.000 0.000 0.000 0.000 bisect.py:1() - 1 0.000 0.000 0.000 0.000 {binascii.hexlify} - 1 0.000 0.000 0.000 0.000 auth.py:58(HTTPDigestAuth) - 1 0.000 0.000 0.000 0.000 auth.py:51(HTTPProxyAuth) - 1 0.000 0.000 0.000 0.000 auth.py:40(HTTPBasicAuth) - 1 0.000 0.000 0.000 0.000 auth.py:33(AuthBase) - 1 0.000 0.000 0.000 0.000 atexit.py:6() - 1 0.000 0.000 0.000 0.000 atexit.py:37(register) - 1 0.000 0.000 0.000 0.000 ascii.py:8() - 1 0.000 0.000 0.000 0.000 ascii.py:41(getregentry) - 1 0.000 0.000 0.000 0.000 ascii.py:34(StreamConverter) - 1 0.000 0.000 0.000 0.000 ascii.py:31(StreamReader) - 1 0.000 0.000 0.000 0.000 ascii.py:28(StreamWriter) - 1 0.000 0.000 0.000 0.000 ascii.py:24(IncrementalDecoder) - 1 0.000 0.000 0.000 0.000 ascii.py:20(IncrementalEncoder) - 1 0.000 0.000 0.000 0.000 ascii.py:13(Codec) - 1 0.000 0.000 0.000 0.000 argparse.py:987(_CountAction) - 1 0.000 0.000 0.000 0.000 argparse.py:961(_AppendConstAction) - 1 0.000 0.000 0.000 0.000 argparse.py:924(_AppendAction) - 1 0.000 0.000 0.000 0.000 argparse.py:907(_StoreFalseAction) - 1 0.000 0.000 0.000 0.000 argparse.py:892(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:890(_StoreTrueAction) - 1 0.000 0.000 0.000 0.000 argparse.py:869(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:867(_StoreConstAction) - 3 0.000 0.000 0.000 0.000 argparse.py:863(__call__) - 3 0.000 0.000 0.000 0.000 argparse.py:834(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:832(_StoreAction) - 5 0.000 0.000 0.000 0.000 argparse.py:792(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:741(Action) - 1 0.000 0.000 0.000 0.000 argparse.py:732(ArgumentTypeError) - 1 0.000 0.000 0.000 0.000 argparse.py:712(ArgumentError) - 1 0.000 0.000 0.000 0.000 argparse.py:678(ArgumentDefaultsHelpFormatter) - 1 0.000 0.000 0.000 0.000 argparse.py:667(RawTextHelpFormatter) - 1 0.000 0.000 0.000 0.000 argparse.py:656(RawDescriptionHelpFormatter) - 1 0.000 0.000 0.000 0.000 argparse.py:230(_Section) - 3 0.000 0.000 0.000 0.000 argparse.py:2256(_check_value) - 3 0.000 0.000 0.000 0.000 argparse.py:2231(_get_value) - 3 0.000 0.000 0.000 0.000 argparse.py:2182(_get_values) - 3 0.000 0.000 0.000 0.000 argparse.py:2138(_get_nargs_pattern) - 3 0.000 0.000 0.000 0.000 argparse.py:2037(_parse_optional) - 1 0.000 0.000 0.000 0.000 argparse.py:182(HelpFormatter) - 3 0.000 0.000 0.000 0.000 argparse.py:1782(take_action) - 1 0.000 0.000 0.000 0.000 argparse.py:1689(_get_positional_actions) - 5 0.000 0.000 0.000 0.000 argparse.py:1677(_add_action) - 1 0.000 0.000 0.000 0.000 argparse.py:1538(ArgumentParser) - 1 0.000 0.000 0.000 0.000 argparse.py:1518(_MutuallyExclusiveGroup) - 5 0.000 0.000 0.000 0.000 argparse.py:1508(_add_action) - 2 0.000 0.000 0.000 0.000 argparse.py:1487(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:1485(_ArgumentGroup) - 1 0.000 0.000 0.000 0.000 argparse.py:147(_AttributeHolder) - 5 0.000 0.000 0.000 0.000 argparse.py:1449(_check_conflict) - 3 0.000 0.000 0.000 0.000 argparse.py:1440(_get_handler) - 5 0.000 0.000 0.000 0.000 argparse.py:1436(_pop_action_class) - 2 0.000 0.000 0.000 0.000 argparse.py:1401(_get_optional_kwargs) - 3 0.000 0.000 0.000 0.000 argparse.py:1385(_get_positional_kwargs) - 5 0.000 0.000 0.000 0.000 argparse.py:1321(_add_action) - 2 0.000 0.000 0.000 0.000 argparse.py:1311(add_argument_group) - 13 0.000 0.000 0.000 0.000 argparse.py:1246(_registry_get) - 34 0.000 0.000 0.000 0.000 argparse.py:1242(register) - 13 0.000 0.000 0.000 0.000 argparse.py:122(_callable) - 1 0.000 0.000 0.000 0.000 argparse.py:1188(_ActionsContainer) - 1 0.000 0.000 0.000 0.000 argparse.py:1174(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:1167(Namespace) - 1 0.000 0.000 0.000 0.000 argparse.py:1124(FileType) - 1 0.000 0.000 0.000 0.000 argparse.py:1054(_ChoicesPseudoAction) - 1 0.000 0.000 0.000 0.000 argparse.py:1052(_SubParsersAction) - 1 0.000 0.000 0.000 0.000 argparse.py:1027(_VersionAction) - 1 0.000 0.000 0.000 0.000 argparse.py:1010(__init__) - 1 0.000 0.000 0.000 0.000 argparse.py:1008(_HelpAction) - 1 0.000 0.000 0.000 0.000 adapters.py:9() - 1 0.000 0.000 0.000 0.000 adapters.py:45(HTTPAdapter) - 6 0.000 0.000 0.000 0.000 adapters.py:35(__init__) - 1 0.000 0.000 0.000 0.000 adapters.py:32(BaseAdapter) - 1 0.000 0.000 0.000 0.000 abc.py:145(__subclasscheck__) - 2 0.000 0.000 0.000 0.000 _abcoll.py:26() - 1 0.000 0.000 0.000 0.000 _abcoll.py:24(_hasattr) - 1 0.000 0.000 0.000 0.000 _abcoll.py:127(__subclasshook__) - - diff --git a/toys/grequests.py b/toys/grequests.py deleted file mode 100644 index b10f0d4..0000000 --- a/toys/grequests.py +++ /dev/null @@ -1,182 +0,0 @@ -# -*- coding: utf-8 -*- - -# Laurent's version of grequests.py : -# Merged https://github.com/kennethreitz/grequests/pull/22/files -# in recent grequest branch, to have working exception_handler - -""" -grequests -~~~~~~~~~ - -This module contains an asynchronous replica of ``requests.api``, powered -by gevent. All API methods return a ``Request`` instance (as opposed to -``Response``). A list of requests can be sent with ``map()``. -""" -from functools import partial - -try: - import gevent - from gevent import monkey as curious_george - from gevent.pool import Pool -except ImportError: - raise RuntimeError('Gevent is required for grequests.') - -# Monkey-patch. -curious_george.patch_all(thread=False, select=False) - -from requests import Session - -def _greenlet_report_error(self, exc_info): - import sys - import traceback - - exception = exc_info[1] - if isinstance(exception, gevent.greenlet.GreenletExit): - self._report_result(exception) - return - exc_handler = False - for lnk in self._links: - if isinstance(lnk, gevent.greenlet.FailureSpawnedLink): - exc_handler = True - break - if not exc_handler: - try: - traceback.print_exception(*exc_info) - except: - pass - self._exception = exception - if self._links and self._notifier is None: - self._notifier = gevent.greenlet.core.active_event(self._notify_links) - ## Only print errors - if not exc_handler: - info = str(self) + ' failed with ' - try: - info += self._exception.__class__.__name__ - except Exception: - info += str(self._exception) or repr(self._exception) - sys.stderr.write(info + '\n\n') - - -## Patch the greenlet error reporting -gevent.greenlet.Greenlet._report_error = _greenlet_report_error - -__all__ = ( - 'map', 'imap', - 'get', 'options', 'head', 'post', 'put', 'patch', 'delete', 'request' -) - - -class AsyncRequest(object): - """ Asynchronous request. - - Accept same parameters as ``Session.request`` and some additional: - - :param session: Session which will do request - :param callback: Callback called on response. - Same as passing ``hooks={'response': callback}`` - """ - def __init__(self, method, url, **kwargs): - #: Request method - self.method = method - #: URL to request - self.url = url - #: Associated ``Session`` - self.session = kwargs.pop('session', None) - if self.session is None: - self.session = Session() - - callback = kwargs.pop('callback', None) - if callback: - kwargs['hooks'] = {'response': callback} - - #: The rest arguments for ``Session.request`` - self.kwargs = kwargs - #: Resulting ``Response`` - self.response = None - - def send(self, **kwargs): - """ - Prepares request based on parameter passed to constructor and optional ``kwargs```. - Then sends request and saves response to :attr:`response` - - :returns: ``Response`` - """ - merged_kwargs = {} - merged_kwargs.update(self.kwargs) - merged_kwargs.update(kwargs) - self.response = self.session.request(self.method, - self.url, **merged_kwargs) - return self.response - - -def send(r, pool=None, stream=False, exception_handler=None): - """Sends the request object using the specified pool. If a pool isn't - specified this method blocks. Pools are useful because you can specify size - and can hence limit concurrency.""" - if pool != None: - p = pool.spawn - else: - p = gevent.spawn - - if exception_handler: - glet = p(r.send, stream=stream) - - def eh_wrapper(g): - return exception_handler(r,g.exception) - - glet.link_exception(eh_wrapper) - else: - glet = p(r.send, stream=stream) - - return glet - - -# Shortcuts for creating AsyncRequest with appropriate HTTP method -get = partial(AsyncRequest, 'GET') -options = partial(AsyncRequest, 'OPTIONS') -head = partial(AsyncRequest, 'HEAD') -post = partial(AsyncRequest, 'POST') -put = partial(AsyncRequest, 'PUT') -patch = partial(AsyncRequest, 'PATCH') -delete = partial(AsyncRequest, 'DELETE') - -# synonym -def request(method, url, **kwargs): - return AsyncRequest(method, url, **kwargs) - - -def map(requests, stream=False, size=None, exception_handler=None): - """Concurrently converts a list of Requests to Responses. - - :param requests: a collection of Request objects. - :param stream: If True, the content will not be downloaded immediately. - :param size: Specifies the number of requests to make at a time. If None, no throttling occurs. - """ - - requests = list(requests) - - pool = Pool(size) if size else None - jobs = [send(r, pool, stream=stream, exception_handler=exception_handler) for r in requests] - gevent.joinall(jobs) - - return [r.response for r in requests] - - -def imap(requests, stream=False, size=2, exception_handler=None): - """Concurrently converts a generator object of Requests to - a generator of Responses. - - :param requests: a generator of Request objects. - :param stream: If True, the content will not be downloaded immediately. - :param size: Specifies the number of requests to make at a time. default is 2 - """ - - pool = Pool(size) - - def send(r): - return r.send(stream=stream, exception_handler=exception_handler) - - for r in pool.imap_unordered(send, requests): - yield r - - pool.join() diff --git a/toys/httplib_pipelining.py b/toys/httplib_pipelining.py deleted file mode 100644 index 5f5ac4e..0000000 --- a/toys/httplib_pipelining.py +++ /dev/null @@ -1,96 +0,0 @@ -# Based on "python-http-pipelining" by Markus J @ ActiveState Code / Recipes -# http://code.activestate.com/recipes/576673-python-http-pipelining/ -# Rewrote by: 2013 Laurent Ghigonis - -from httplib import HTTPConnection, _CS_IDLE -import urlparse - -class HTTP_pipeline(): - def __init__(self, domain, queue, cb_response, - max_out_bound=4, debuglevel=0): - print "XXX HTTP_pipeline.__init__" - self.queue = queue - self.cb_response = cb_response - self.max_out_bound = max_out_bound - self.debuglevel = debuglevel - self.conn = HTTPConnection(domain) - self.conn.set_debuglevel(debuglevel) - self.respobjs = list() - self.data = list() - self.headers = {'Host':domain, - 'Content-Length':0, - 'Connection':'Keep-Alive'} - - def run(self): - print "XXX HTTP_pipeline.run" - while True: - # Send - out_bound = 0 - while out_bound < self.max_out_bound: - page = self.queue.get() - if self.debuglevel > 0: - print 'Sending request for %r...' % (page,) - self.conn._HTTPConnection__state = _CS_IDLE # FU private variable! - self.conn.request("GET", page, None, self.headers) - res = self.conn.response_class(self.conn.sock, strict=self.conn.strict, method=self.conn._method) - self.respobjs.append(res) - self.data.append(None) - out_bound += 1 - # Try to read a response - for i,resp in enumerate(self.respobjs): - if resp is None: - continue - if self.debuglevel > 0: - print 'Retrieving %r...' % (resp) - out_bound -= 1 - skip_read = False - resp.begin() - if self.debuglevel > 0: - print ' %d %s' % (resp.status, resp.reason) - if 200 <= resp.status < 300: - # Ok - data = resp.read() - cookie = resp.getheader('Set-Cookie') - if cookie is not None: - self.headers['Cookie'] = cookie - skip_read = True - self.respobjs.remove(resp) - self.cb_response(resp, data) - elif 300 <= resp.status < 400: - # Redirect - loc = resp.getheader('Location') - parsed = loc and urlparse.urlparse(loc) - if not parsed: - # Missing or empty location header - data = (resp.status, resp.reason) - elif parsed.netloc != '' and parsed.netloc != host: - # Redirect to another host - data = (resp.status, resp.reason, loc) - else: - # Redirect URL - path = urlparse.urlunparse(parsed._replace(scheme='',netloc='',fragment='')) - #print ' Updated %r to %r' % (pages[i],path) - #pages[i] = path - data = (resp.status, resp.reason, path) - self.respobjs.remove(resp) - self.cb_response(resp, data) - elif resp.status >= 400: - # Failed - data = (resp.status, resp.reason) - self.respobjs.remove(resp) - self.cb_response(resp, data) - if resp.will_close: - # Connection (will be) closed, need to resend - self.conn.close() - if self.debuglevel > 0: - print ' Connection closed' - # XXX reconnect - # XXX resend - break - elif not skip_read: - resp.read() # read any data - if any(r is None for r in enumerate(self.respobjs)): - # Send another pending request - break - else: - break # All respobjs are None? diff --git a/toys/pphidden.py b/toys/pphidden.py deleted file mode 100644 index cef18e2..0000000 --- a/toys/pphidden.py +++ /dev/null @@ -1,29 +0,0 @@ -import requests -import time -import sys - -# http://www.pointerpointer.com/gridPositions.json - -BASE_URL="http://www.pointerpointer.com/images" - -image = int(sys.argv[1]) -sx = int(sys.argv[2]) -sy = int(sys.argv[3]) - -print ">>> Looking for image %d <<<" % image -print ">>>> starting x=%d y=%d <<<<" % (sx, sy) - -s = requests.Session() - -for x in range(sx, 2000): - for y in range(sy, 2000): - url = "%s/N%04d_%d_%d.jpg" % (BASE_URL, image, x, y) - sys.stdout.write("[-] %s: " % url) - sys.stdout.flush() - r = s.get(url) - print r.status_code - if r.status_code != 404: - print "[*] found !" - sys.exit(0) - # time.sleep(0.2) -sys.exit(1) diff --git a/toys/pphidden_async.py b/toys/pphidden_async.py deleted file mode 100644 index 463364f..0000000 --- a/toys/pphidden_async.py +++ /dev/null @@ -1,83 +0,0 @@ -import sys -import argparse -import grbrute -import brhute_threaded - -# http://www.pointerpointer.com/gridPositions.json - -class Pp_url: - def __init__(self, image, x, y, max_x=100, max_y=100): - self.host = "www.pointerpointer.com" - self.base_url = "/images" - self.image = image - self.x = x - self.y = y - self.max_x = max_x - self.max_y = max_y - print ">>> Looking for image %d <<<" % image - print ">>>> starting x=%d y=%d <<<<" % (x, y) - def __iter__(self): - return self - def next(self): - url = "%s/N%04d_%d_%d.jpg" % (self.base_url, self.image, self.x, self.y) - self.y += 1 - if self.y > self.max_y: - self.x += 1 - self.y = 0 - if self.x > self.max_x: - raise StopIteration - return (self.host, url) - -def cb_response_grbrute(res): - global found - if not found: - print "[-] %s : %d" % (res.url, res.status_code) - if res.status_code != 404: - found = res.url - return False - return True - -def cb_response_brhute(res): - global found - if not found: - print "res: %s" % res - #if res.status_code != 404: - # found = res.url - # return False - #return True - -parser = argparse.ArgumentParser(description='pphidden_async', - epilog="Example: %s 73 0 0" % sys.argv[0]) -parser.add_argument('image', action="store", type=int, - help="Image number") -parser.add_argument('start_x', action="store", type=int, - help="Start at coordinate X=") -parser.add_argument('start_y', action="store", type=int, - help="Start at coordinate Y=") -parser.add_argument('-b', action="store", dest="backend", default="gbrute", - help="Backend, can be gbrute (default) or brhute (work in progress)") -parser.add_argument('-v', action="store_true", dest="verbose", default=False, - help="verbose") -args = parser.parse_args() - -found = None - -if args.backend == "gbrute": - url_iter = Pp_url(args.image, args.start_x, args.start_y) - grbrute.Grbrute(url_iter, cb_response_grbrute, verbose=args.verbose) -elif args.backend == "brhute": - url_iter = Pp_url(args.image, args.start_x, args.start_y) - #brhute_threaded.Brhute_ip(url_iter, "207.171.163.203", # Amazon - # cb_response=cb_response_brhute, verbose=args.verbose) - #brhute.Brhute_ip(url_iter, "173.194.34.14", # Google - # cb_response=cb_response_brhute, verbose=args.verbose) - brhute_threaded.Brhute_ip(url_iter, "www.pointerpointer.com", # Amazon - cb_response=cb_response_brhute, verbose=args.verbose) -else: - print "Error: Unknown backend specified" - sys.exit(1) - -if found is False: - print "[*] not found" - sys.exit(1) -print "[*] found: %s" % found diff --git a/toys/threaded_resolver.py b/toys/threaded_resolver.py deleted file mode 100644 index a2d347b..0000000 --- a/toys/threaded_resolver.py +++ /dev/null @@ -1,302 +0,0 @@ -# From pyxmpp2 resolver.py -# Made standalone by laurent -# https://raw.github.com/Jajcus/pyxmpp2/master/pyxmpp2/resolver.py - -# (C) Copyright 2003-2011 Jacek Konieczny -# (C) Copyright 2013 Laurent Ghigonis -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU Lesser General Public License Version -# 2.1 as published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with this program; if not, write to the Free Software -# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -# - -"""DNS resolever with SRV record support. - -Normative reference: - - `RFC 1035 `__ - - `RFC 2782 `__ -""" - -import socket -import random -import logging -import threading -import Queue - -import dns.resolver -import dns.name -import dns.exception - -DEFAULT_SETTINGS = {"ipv4": True, "ipv6": False, "prefer_ipv6": False} - -def is_ipv6_available(): - """Check if IPv6 is available. - - :Return: `True` when an IPv6 socket can be created. - """ - try: - socket.socket(socket.AF_INET6).close() - except (socket.error, AttributeError): - return False - return True - -def is_ipv4_available(): - """Check if IPv4 is available. - - :Return: `True` when an IPv4 socket can be created. - """ - try: - socket.socket(socket.AF_INET).close() - except socket.error: - return False - return True - -def shuffle_srv(records): - """Randomly reorder SRV records using their weights. - - :Parameters: - - `records`: SRV records to shuffle. - :Types: - - `records`: sequence of :dns:`dns.rdtypes.IN.SRV` - - :return: reordered records. - :returntype: `list` of :dns:`dns.rdtypes.IN.SRV`""" - if not records: - return [] - ret = [] - while len(records) > 1: - weight_sum = 0 - for rrecord in records: - weight_sum += rrecord.weight + 0.1 - thres = random.random() * weight_sum - weight_sum = 0 - for rrecord in records: - weight_sum += rrecord.weight + 0.1 - if thres < weight_sum: - records.remove(rrecord) - ret.append(rrecord) - break - ret.append(records[0]) - return ret - -def reorder_srv(records): - """Reorder SRV records using their priorities and weights. - - :Parameters: - - `records`: SRV records to shuffle. - :Types: - - `records`: `list` of :dns:`dns.rdtypes.IN.SRV` - - :return: reordered records. - :returntype: `list` of :dns:`dns.rdtypes.IN.SRV`""" - records = list(records) - records.sort() - ret = [] - tmp = [] - for rrecord in records: - if not tmp or rrecord.priority == tmp[0].priority: - tmp.append(rrecord) - continue - ret += shuffle_srv(tmp) - tmp = [rrecord] - if tmp: - ret += shuffle_srv(tmp) - return ret - -class BlockingResolver(): - """Blocking resolver using the DNSPython package. - - Both `resolve_srv` and `resolve_address` will block until the - lookup completes or fail and then call the callback immediately. - """ - def __init__(self, settings = None): - if settings: - self.settings = settings - else: - self.settings = DEFAULT_SETTINGS - - def resolve_srv(self, domain, service, protocol, callback): - """Start looking up an SRV record for `service` at `domain`. - - `callback` will be called with a properly sorted list of (hostname, - port) pairs on success. The list will be empty on error and it will - contain only (".", 0) when the service is explicitely disabled. - - :Parameters: - - `domain`: domain name to look up - - `service`: service name e.g. 'xmpp-client' - - `protocol`: protocol name, e.g. 'tcp' - - `callback`: a function to be called with a list of received - addresses - :Types: - - `domain`: `unicode` - - `service`: `unicode` - - `protocol`: `unicode` - - `callback`: function accepting a single argument - """ - if isinstance(domain, unicode): - domain = domain.encode("idna").decode("us-ascii") - domain = "_{0}._{1}.{2}".format(service, protocol, domain) - try: - records = dns.resolver.query(domain, 'SRV') - except dns.exception.DNSException, err: - logger.warning("Could not resolve {0!r}: {1}" - .format(domain, err.__class__.__name__)) - callback([]) - return - if not records: - callback([]) - return - - result = [] - for record in reorder_srv(records): - hostname = record.target.to_text() - if hostname in (".", ""): - continue - result.append((hostname, record.port)) - - if not result: - callback([(".", 0)]) - else: - callback(result) - return - - def resolve_address(self, hostname, callback, allow_cname = True): - """Start looking up an A or AAAA record. - - `callback` will be called with a list of (family, address) tuples - (each holiding socket.AF_* and IPv4 or IPv6 address literal) on - success. The list will be empty on error. - - :Parameters: - - `hostname`: the host name to look up - - `callback`: a function to be called with a list of received - addresses - - `allow_cname`: `True` if CNAMEs should be followed - :Types: - - `hostname`: `unicode` - - `callback`: function accepting a single argument - - `allow_cname`: `bool` - """ - if isinstance(hostname, unicode): - hostname = hostname.encode("idna").decode("us-ascii") - rtypes = [] - if self.settings["ipv6"]: - rtypes.append(("AAAA", socket.AF_INET6)) - if self.settings["ipv4"]: - rtypes.append(("A", socket.AF_INET)) - if not self.settings["prefer_ipv6"]: - rtypes.reverse() - exception = None - result = [] - for rtype, rfamily in rtypes: - try: - try: - records = dns.resolver.query(hostname, rtype) - except dns.exception.DNSException: - records = dns.resolver.query(hostname + ".", rtype) - except dns.exception.DNSException, err: - exception = err - continue - if not allow_cname and records.rrset.name != dns.name.from_text( - hostname): - logger.warning("Unexpected CNAME record found for {0!r}" - .format(hostname)) - continue - if records: - for record in records: - result.append((rfamily, record.to_text())) - - if not result and exception: - logger.warning("Could not resolve {0!r}: {1}".format(hostname, - exception.__class__.__name__)) - callback(result) - -class ThreadedResolver(): - """Base class for threaded resolvers. - - Starts worker threads, each running a blocking resolver implementation - and communicates with them to provide non-blocking asynchronous API. - """ - def __init__(self, settings = None, max_threads = 1): - if settings: - self.settings = settings - else: - self.settings = DEFAULT_SETTINGS - self.threads = [] - self.queue = Queue.Queue() - self.lock = threading.RLock() - self.max_threads = max_threads - self.last_thread_n = 0 - -def _make_resolver(self): - """Threaded resolver implementation using the DNSPython - :dns:`dns.resolver` module. - """ - return BlockingResolver(self.settings) - - def stop(self): - """Stop the resolver threads. - """ - with self.lock: - for dummy in self.threads: - self.queue.put(None) - - def _start_thread(self): - """Start a new working thread unless the maximum number of threads - has been reached or the request queue is empty. - """ - with self.lock: - if self.threads and self.queue.empty(): - return - if len(self.threads) >= self.max_threads: - return - thread_n = self.last_thread_n + 1 - self.last_thread_n = thread_n - thread = threading.Thread(target = self._run, - name = "{0!r} #{1}".format(self, thread_n), - args = (thread_n,)) - self.threads.append(thread) - thread.daemon = True - thread.start() - - def resolve_address(self, hostname, callback, allow_cname = True): - request = ("resolve_address", (hostname, callback, allow_cname)) - self._start_thread() - self.queue.put(request) - - def resolve_srv(self, domain, service, protocol, callback): - request = ("resolve_srv", (domain, service, protocol, callback)) - self._start_thread() - self.queue.put(request) - - def _run(self, thread_n): - """The thread function.""" - try: - logger.debug("{0!r}: entering thread #{1}" - .format(self, thread_n)) - resolver = self._make_resolver() - while True: - request = self.queue.get() - if request is None: - break - method, args = request - logger.debug(" calling {0!r}.{1}{2!r}" - .format(resolver, method, args)) - getattr(resolver, method)(*args) # pylint: disable=W0142 - self.queue.task_done() - logger.debug("{0!r}: leaving thread #{1}" - .format(self, thread_n)) - finally: - self.threads.remove(threading.currentThread()) - -# vi: sts=4 et sw=4 diff --git a/toys/twisted_http.py b/toys/twisted_http.py deleted file mode 100644 index 805c78a..0000000 --- a/toys/twisted_http.py +++ /dev/null @@ -1,26 +0,0 @@ -from twisted.web import client -from twisted.internet import reactor, defer - -urls = [ - 'http://www.python.org', - 'http://stackoverflow.com', - 'http://www.twistedmatrix.com', - 'http://www.google.com', - 'http://www.google.com/toto', - 'http://www.google.com/titi', - 'http://www.google.com/tata', - 'http://launchpad.net', - 'http://github.com', - 'http://bitbucket.org', -] - -def finish(results): - for result in results: - print 'GOT PAGE', len(result), 'bytes' - reactor.stop() - -factory = client.HTTPClientFactory() -waiting = [client.getPage(url, factory) for url in urls] -defer.gatherResults(waiting).addCallback(finish) - -reactor.run() diff --git a/toys/twisted_http_persistent.py b/toys/twisted_http_persistent.py deleted file mode 100644 index 333bcb3..0000000 --- a/toys/twisted_http_persistent.py +++ /dev/null @@ -1,39 +0,0 @@ -from twisted.internet import reactor -from twisted.internet.defer import Deferred, DeferredList -from twisted.internet.protocol import Protocol -from twisted.web.client import Agent, HTTPConnectionPool - -class IgnoreBody(Protocol): - def __init__(self, deferred): - self.deferred = deferred - - def dataReceived(self, bytes): - pass - - def connectionLost(self, reason): - self.deferred.callback(None) - - -def cbRequest(response): - print 'Response code:', response.code - finished = Deferred() - response.deliverBody(IgnoreBody(finished)) - return finished - -pool = HTTPConnectionPool(reactor) -agent = Agent(reactor, pool=pool) - -def requestGet(url): - d = agent.request('GET', url) - d.addCallback(cbRequest) - return d - -# Two requests to the same host: -d = requestGet('http://google.com/titi').addCallback( - lambda ign: requestGet("http://google.com/tata")) -def cbShutdown(ignored): - reactor.stop() -d.addCallback(cbShutdown) - -reactor.run() - diff --git a/toys/twisted_http_simultaneous.py b/toys/twisted_http_simultaneous.py deleted file mode 100644 index b9de196..0000000 --- a/toys/twisted_http_simultaneous.py +++ /dev/null @@ -1,39 +0,0 @@ -from twisted.internet import reactor -from twisted.internet.defer import Deferred, DeferredList -from twisted.internet.protocol import Protocol -from twisted.web.client import Agent, HTTPConnectionPool - -class IgnoreBody(Protocol): - def __init__(self, deferred): - self.deferred = deferred - - def dataReceived(self, bytes): - pass - - def connectionLost(self, reason): - self.deferred.callback(None) - - -def cbRequest(response): - print 'Response code:', response.code - finished = Deferred() - response.deliverBody(IgnoreBody(finished)) - return finished - -pool = HTTPConnectionPool(reactor, persistent=True) -pool.maxPersistentPerHost = 1 -agent = Agent(reactor, pool=pool) - -def requestGet(url): - d = agent.request('GET', url) - d.addCallback(cbRequest) - return d - -# Two requests to the same host: -requestGet('http://google.com/titi') -requestGet("http://google.com/tata") -requestGet("http://google.com/toto") -requestGet("http://google.com/tralala") - -reactor.run() - -- cgit v1.2.3-59-g8ed1b