Last active
March 13, 2021 14:35
-
-
Save shikendon/e68623cad29ae43945e8c594f9fd3781 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
#!/usr/bin/env python | |
"""Extend Python's built in HTTP server to save files | |
curl or wget can be used to send files with options similar to the following | |
curl -X PUT --upload-file somefile.txt http://localhost:8000 | |
wget -O- --method=PUT --body-file=somefile.txt http://localhost:8000/somefile.txt | |
__Note__: curl automatically appends the filename onto the end of the URL so | |
the path can be omitted. | |
""" | |
import os | |
try: | |
import http.server as server | |
except ImportError: | |
# Handle Python 2.x | |
import SimpleHTTPServer as server | |
class HTTPRequestHandler(server.SimpleHTTPRequestHandler): | |
"""Extend SimpleHTTPRequestHandler to handle PUT requests""" | |
def do_PUT(self): | |
"""Save a file following a HTTP PUT request""" | |
filename = os.path.basename(self.path) | |
file_length = int(self.headers['Content-Length']) | |
with open(filename, 'wb') as output_file: | |
output_file.write(self.rfile.read(file_length)) | |
self.send_response(201, 'Created') | |
self.end_headers() | |
reply_body = 'Saved "%s"\n' % filename | |
self.wfile.write(reply_body.encode('utf-8')) | |
if __name__ == '__main__': | |
server.test(HandlerClass=HTTPRequestHandler) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment