Created
May 4, 2017 13:31
-
-
Save bra-fsn/42e556ddd74ff34467b17b9a6d613b33 to your computer and use it in GitHub Desktop.
HTTP copy between two URLs with treq
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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