def _splitter(url): base, query = splitquery(url) parts = dict([q.split('=') for q in query.split('&')]) return base, parts
def _as_dict(url): base, query = splitquery(url) if query: return OrderedDict([q.split('=') for q in query.split('&')]) else: return url
def resolve_headers(self): # 解析请求方法、url、协议 self.request_line = self.requestline request_line = self.requestline.split(' ') self.Method = request_line[0].upper() # 请求地址和参数分割 mpath, margs = request.splitquery(self.path) # ?分割 self.Url = mpath self.Protocol = request_line[2] # 如果有携带参数,并且请求方式为GET if util.not_empty(margs) and self.Method == "GET": parameters = margs.split('&') for parameter in parameters: if util.not_empty(parameter): key, val = parameter.split('=', 1) self.request_data[key] = val # 头部信息 for header in self.headers: key = header.lower() val = self.headers[header] if key == "Host".lower(): self.Host = val elif key == "Connection".lower(): self.Connection = val elif key == "Cache-Control".lower(): self.CacheControl = val elif key == "User-Agent".lower(): self.UserAgent = val elif key == "Accept".lower(): self.Accept = val elif key == "Content-Type".lower(): self.ContentType = val elif key == "Accept-Encoding".lower(): self.AcceptEncoding = val elif key == "Accept-Language".lower(): self.AcceptLanguage = val elif key == "Cookie".lower(): ck = val.split('; ') for k in ck: if k.lower() == "csrftoken": self.csrf_token = k.split("=")[0] else: self.Cookie = k # self.head[key] = val # 解析参数,并且请求方式为POST if util.not_empty( self.headers['Content-length']) and self.Method == "POST": body = self.rfile.read(int( self.headers['Content-length'])).decode('utf-8') if body.find("Content-Disposition") != -1: hd = body[body.find("\r\n"):len(body)].replace('\r\n\r\n', '') form = hd.split('\r\n') for content in form: if content.find("form-data") != -1: param = content.split('"') self.request_data[param[1]] = param[2] else: params = body.split("&") if util.not_empty(params[0]): for param in params: k, v = param.split("=", 1) self.request_data[k] = v
def resolve_headers(self, req): # 解析请求方法、url、协议 request_line, headers = req.split('\r\n', 1) self.request_line = request_line header_list = request_line.split(' ') self.Method = header_list[0].upper() # 请求地址和参数分割 mpath, margs = request.splitquery(header_list[1]) # ?分割 self.Url = mpath self.Protocol = header_list[2] # 如果有携带参数,并且请求方式为GET if util.not_empty(margs) and self.Method == "GET": parameters = margs.split('&') for parameter in parameters: if util.not_empty(parameter): key, val = parameter.split('=', 1) self.request_data[key] = val # 头部信息 request_headers = headers.split('\r\n\r\n') head_options = request_headers[0].split('\r\n') for header in head_options: key, val = header.split(': ', 1) key = key.lower() if key == "Host".lower(): self.Host = val elif key == "Connection".lower(): self.Connection = val elif key == "Cache-Control".lower(): self.CacheControl = val elif key == "User-Agent".lower(): self.UserAgent = val elif key == "Accept".lower(): self.Accept = val elif key == "Content-Type".lower(): self.ContentType = val elif key == "Accept-Encoding".lower(): self.AcceptEncoding = val elif key == "Accept-Language".lower(): self.AcceptLanguage = val elif key == "Cookie".lower(): ck = val.split('; ') for k in ck: if k.lower() == "csrftoken": self.csrf_token = k.split("=")[0] else: self.Cookie = k # self.head[key] = val # 解析参数,并且请求方式为POST if len(request_headers) > 1 and self.Method == "POST": hd = headers[headers.find("\r\n\r\n"):len(headers)].replace( '\r\n\r\n', '') if hd.find("Content-Disposition") != -1: form = hd.split('\r\n') for content in form: if content.find("form-data") != -1: param = content.split(';')[1].split('"') self.request_data[param[1]] = param[2] else: params = hd.split("&") if util.not_empty(params[0]): for param in params: k, v = param.split("=", 1) self.request_data[k] = v
>>> url1="https://stackoverflow.com/questions/34475051/need-to-install-urllib2-for-python-3-5-1" >>> sp = request.urlsplit(url1) >>> sp SplitResult(scheme='https', netloc='stackoverflow.com', path='/questions/34475051/need-to-install-urllib2-for-python-3-5-1', query='', fragment='') >>> url1="https://stackoverflow.com/questions/34475051/need-to-install-urllib2-for-python-3-5-1?admin=no¶m=yes:8000" >>> sp = request.urlsplit(url1) >>> sp SplitResult(scheme='https', netloc='stackoverflow.com', path='/questions/34475051/need-to-install-urllib2-for-python-3-5-1', query='admin=no¶m=yes:8000', fragment='') >>> sp.admin Traceback (most recent call last): File "<pyshell#27>", line 1, in <module> sp.admin AttributeError: 'SplitResult' object has no attribute 'admin' >>> type(sp[3]) <class 'str'> >>> sp1=request.splitquery() Traceback (most recent call last): File "<pyshell#29>", line 1, in <module> sp1=request.splitquery() TypeError: splitquery() missing 1 required positional argument: 'url' >>> sp1=request.splitquery(url1) >>> spl Traceback (most recent call last): File "<pyshell#31>", line 1, in <module> spl NameError: name 'spl' is not defined >>> sp1 ('https://stackoverflow.com/questions/34475051/need-to-install-urllib2-for-python-3-5-1', 'admin=no¶m=yes:8000') >>> dir(request) ['AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'AbstractHTTPHandler', 'BaseHandler', 'CacheFTPHandler', 'ContentTooShortError', 'DataHandler', 'FTPHandler', 'FancyURLopener', 'FileHandler', 'HTTPBasicAuthHandler', 'HTTPCookieProcessor', 'HTTPDefaultErrorHandler', 'HTTPDigestAuthHandler', 'HTTPError', 'HTTPErrorProcessor', 'HTTPHandler', 'HTTPPasswordMgr', 'HTTPPasswordMgrWithDefaultRealm', 'HTTPPasswordMgrWithPriorAuth', 'HTTPRedirectHandler', 'HTTPSHandler', 'MAXFTPCACHE', 'OpenerDirector', 'ProxyBasicAuthHandler', 'ProxyDigestAuthHandler', 'ProxyHandler', 'Request', 'URLError', 'URLopener', 'UnknownHandler', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', '_cut_port_re', '_ftperrors', '_have_ssl', '_localhost', '_noheaders', '_opener', '_parse_proxy', '_proxy_bypass_macosx_sysconf', '_randombytes', '_safe_gethostbyname', '_thishost', '_url_tempfiles', 'addclosehook', 'addinfourl', 'base64', 'bisect', 'build_opener', 'contextlib', 'email', 'ftpcache', 'ftperrors', 'ftpwrapper', 'getproxies', 'getproxies_environment', 'getproxies_registry', 'hashlib', 'http', 'install_opener', 'io', 'localhost', 'noheaders', 'os', 'parse_http_list', 'parse_keqv_list', 'pathname2url', 'posixpath', 'proxy_bypass', 'proxy_bypass_environment', 'proxy_bypass_registry', 'quote', 're', 'request_host', 'socket', 'splitattr', 'splithost', 'splitpasswd', 'splitport', 'splitquery', 'splittag', 'splittype', 'splituser', 'splitvalue', 'ssl', 'string', 'sys', 'tempfile', 'thishost', 'time', 'to_bytes', 'unquote', 'unquote_to_bytes', 'unwrap', 'url2pathname', 'urlcleanup', 'urljoin', 'urlopen', 'urlparse', 'urlretrieve', 'urlsplit', 'urlunparse', 'warnings'] >>> sp1=request.splitattr(url1)