Created
February 14, 2021 15:47
-
-
Save 11philip22/451e2c05603cd18da3cf6f0d8e7954c7 to your computer and use it in GitHub Desktop.
This file contains hidden or 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) | |
# Don't overwrite files | |
if os.path.exists(filename): | |
self.send_response(409, 'Conflict') | |
self.end_headers() | |
reply_body = '"%s" already exists\n' % filename | |
self.wfile.write(reply_body.encode('utf-8')) | |
return | |
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