import twisted.web
import twisted.web.client
+import urllib.parse
import io
cl.log(DBG.HTTP_FULL, 'requesting: ' + str(mime))
hh = { 'User-Agent': ['hippotat'],
- 'Content-Type': ['multipart/form-data; boundary="b"'],
- 'Content-Length': [str(len(mime))] }
+ 'Content-Type': ['multipart/form-data; boundary="b"'] }
bytesreader = io.BytesIO(mime)
producer = twisted.web.client.FileBodyProducer(bytesreader)
clients = [ ]
+def encode_url(urlstr):
+ # Oh, this is a disaster. We're given a URL as a `str', but the underlying
+ # machinery insists on having `bytes'. Assume we've been given a sensible
+ # URL, with escaping in all of the necessary places, except that it may
+ # contain non-ASCII characters: then encode as UTF-8 and squash the top-
+ # bit-set bytes down to percent escapes.
+ #
+ # This conses like it's going out of fashion, but it gets the job done.
+ return b''.join(bytes([b]) if b < 128 else '%%%02X' % b
+ for b in urlstr.encode('utf-8'))
+
def process_cfg(_opts, putative_servers, putative_clients):
global clients
try: c.ifname = srch(cfg_get_raw, 'ifname_client')
except NoOptionError: pass
- try: c.url = srch(cfg.get,'url')
+ try: c.url = encode_url(srch(cfg.get,'url'))
except NoOptionError:
cfg_process_saddrs(c, ss)
c.url = c.saddrs[0].url()