Skip to content

Instantly share code, notes, and snippets.

@bra-fsn
Created May 4, 2017 13:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bra-fsn/42e556ddd74ff34467b17b9a6d613b33 to your computer and use it in GitHub Desktop.
Save bra-fsn/42e556ddd74ff34467b17b9a6d613b33 to your computer and use it in GitHub Desktop.
HTTP copy between two URLs with treq
import treq
from twisted.internet import reactor
from twisted.web.iweb import IBodyProducer
from twisted.internet.defer import inlineCallbacks
from zope.interface import implements
class UploadProducer(object):
implements(IBodyProducer)
def __init__(self, get_resp):
self.get_resp = get_resp
self.length = get_resp.length
self._producer = get_resp.original._transport
def startProducing(self, consumer):
d=treq.collect(self.get_resp,consumer.write)
return d
def resumeProducing(self):
self._producer.resumeProducing()
def pauseProducing(self):
self._producer.pauseProducing()
def stopProducing(self):
self._producer.stopProducing()
@inlineCallbacks
def copy(src, dst):
get_resp = yield treq.get(src, unbuffered=True)
print "GET", get_resp.code, get_resp.original
put_resp = yield treq.put(dst,data=UploadProducer(get_resp))
print "PUT", put_resp, put_resp.code
reactor.callWhenRunning(copy, 'http://http1.example.com/test', 'http://http2.example.com/test')
reactor.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment