Skip to content

Instantly share code, notes, and snippets.

@tzickel
Created April 8, 2016 14:00
Show Gist options
  • Save tzickel/acac6bf2faaaadac1245d8a2d8683516 to your computer and use it in GitHub Desktop.
Save tzickel/acac6bf2faaaadac1245d8a2d8683516 to your computer and use it in GitHub Desktop.
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