code: def open_data(self, url, data=None):
          
          if not isinstance(url, str):
              raise URLError('data error: proxy support for data protocol currently not implemented')
          # ignore POSTed data
          #
          # syntax of data URLs:
          # dataurl   := "data:" [ mediatype ] [ ";base64" ] "," data
          # mediatype := [ type "/" subtype ] *( ";" parameter )
          # data      := *urlchar
          # parameter := attribute "=" value
          try:
              [type, data] = url.split(',', 1)
          except ValueError:
              raise IOError('data error', 'bad data URL')
          if not type:
              type = 'text/plain;charset=US-ASCII'
          semi = type.rfind(';')
          if semi >= 0 and '=' not in type[semi:]:
              encoding = type[semi+1:]
              type = type[:semi]
          else:
              encoding = ''
          msg = []
          msg.append('Date: %s'%time.strftime('%a, %d %b %Y %H:%M:%S GMT',
                                              time.gmtime(time.time())))
          msg.append('Content-type: %s' % type)
          if encoding == 'base64':
              # XXX is this encoding/decoding ok?
              data = base64.decodebytes(data.encode('ascii')).decode('latin-1')
          else:
              data = unquote(data)
          msg.append('Content-Length: %d' % len(data))
          msg.append('')
          msg.append(data)
          msg = '\n'.join(msg)
          headers = email.message_from_string(msg)
          f = io.StringIO(msg)
          #f.fileno = None     # needed for addinfourl
          return addinfourl(f, headers, url)
docs: Use "data" URL.