class Request(object): ''' ''' #Default user agent string DEFAULT_USER_AGENT = cfg["scan_signature"] if cfg.has_key( "scan_signature") else "TScanner/1.0" def __init__(self, url, method='GET', headers=None, cookies=None, referer=None, data=None, user_agent=DEFAULT_USER_AGENT, **kwargs): ''' ''' if isinstance(url, URL): self._url = url else: self._url = URL(url) self._method = method self.id = uuid.uuid1() self._headers = {} if headers: self._headers.update(headers) self._cookies = cookies self._referer = referer self._user_agent = user_agent if self._cookies: self._headers.update({"Cookie": self._cookies}) if self._referer: self._headers.update({"Referer": self._referer}) if self._user_agent: self._headers.update({"User-Agent": self._user_agent}) self._get_data = self._url.get_querystring() self._post_data = data if data else "" def get_get_param(self): ''' ''' return self._get_data def get_post_param(self): ''' ''' return self._post_data def get_url(self): ''' ''' return self._url def get_method(self): ''' ''' return self._method def get_id(self): ''' ''' return self.id def get_headers(self): ''' ''' return self._headers def get_cookies(self): ''' ''' return self._cookies def set_method(self, method): ''' ''' self._method = method.upper() def set_post_data(self, postdata): ''' ''' self._post_data = postdata def set_get_data(self, getdata): ''' ''' self._get_data = getdata def set_referer(self, referer): ''' ''' self._referer = referer def set_cookies(self, cookies): ''' ''' self._cookies = cookies def __eq__(self, other): ''' ''' if self._url == other._url and self._method == other._method: return True else: return False def __str__(self): ''' ''' result_string = self._method result_string += " " + self._url.url_string + " HTTP/1.1\r\n" headers = copy.deepcopy(self._headers) headers.update({"Host": self._url.get_host()}) for key, value in headers.iteritems(): result_string += key + ": " + value result_string += "\r\n" result_string += "\r\n" if self._method == "POST": result_string += str(self._post_data) result_string = result_string.encode("utf-8") return result_string def __repr__(self): ''' ''' vals = { 'method': self.get_method(), 'url': self.get_url().url_string, 'id': self.get_id() } return '<Request | %(method)s | %(url)s | %(id)s>' % vals