Created
April 8, 2016 14:00
-
-
Save tzickel/acac6bf2faaaadac1245d8a2d8683516 to your computer and use it in GitHub Desktop.
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
from flask import Flask | |
import requests | |
import io | |
app = Flask('test') | |
class BufferedStream(object): | |
def __init__(self, data): | |
if isinstance(data, buffer): | |
self.data = data | |
else: | |
self.data = buffer(data) | |
self.length = len(self.data) | |
self.index = 0 | |
def __len__(self): | |
return self.length | |
def read(self, size=None): | |
if size: | |
ret = buffer(self.data, self.index, size) | |
self.index += size | |
else: | |
ret = buffer(self.data, self.index) | |
self.index = self.length | |
return ret | |
def tell(self): | |
return self.index | |
def seek(self, offset, where=0): | |
if where == 0: | |
self.index = offset | |
elif where == 1: | |
self.index += offset | |
elif where == 2: | |
self.index = self.length + offset | |
@app.route('/redirect/', methods=['POST']) | |
def redirect(): | |
response = app.make_response('') | |
response.status_code = 307 | |
response.headers['Location'] = 'http://localhost:5000/' | |
return response | |
@app.route('/', methods=['POST']) | |
def index(): | |
return request.get_data() | |
if __name__ == "__main__": | |
import threading | |
def loop(): | |
app.run() | |
t = threading.Thread(target=loop) | |
t.daemon = True | |
t.start() | |
b = BufferedStream('test') | |
b.seek(2) | |
if requests.post('http://localhost:5000/', data=b).text != 'st': | |
raise Exception() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment