3 from subprocess import PIPE, Popen
4 # raise xmplrpclib.ProtocolError
7 def retrieve(url, cacert=None, postdata=None, timeout=300):
8 options = ('/usr/bin/curl', '--fail', '--silent')
9 if cacert: options += ('--cacert', cacert)
10 if postdata: options += ('--data', '@-')
11 if timeout: options += ('--max-time', str(timeout))
12 p = Popen(options + (url,), stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
13 if postdata: p.stdin.write(postdata)
15 data = p.stdout.read()
19 # when this triggers, the error sometimes doesn't get printed
20 print 'curlwrapper.retrieve: raising xmlrpclib.ProtocolError\n (url=%s,code=%d,stderr=%s,post=%r)'\
21 %(url,rc,err,postdata)
22 if cacert: print "Using cacert file %s"%cacert
23 raise xmlrpclib.ProtocolError(url, rc, err, postdata)