Skip to content

Instantly share code, notes, and snippets.

@xax007
Created November 17, 2018 04:49
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save xax007/41e97f6e505deae56e4d9b8aaec5ed72 to your computer and use it in GitHub Desktop.
Save xax007/41e97f6e505deae56e4d9b8aaec5ed72 to your computer and use it in GitHub Desktop.
Python HTTP PUT Server
import sys
import signal
from threading import Thread
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
class PUTHandler(BaseHTTPRequestHandler):
def do_PUT(self):
length = int(self.headers['Content-Length'])
content = self.rfile.read(length)
self.send_response(200)
with open(self.path[1:], "w") as f:
f.write(content)
def run_on(port):
print("Starting a HTTP PUT Server on {0} port {1} (http://{0}:{1}) ...".format(sys.argv[1], port))
server_address = (sys.argv[1], port)
httpd = HTTPServer(server_address, PUTHandler)
httpd.serve_forever()
if __name__ == "__main__":
if len(sys.argv) < 3:
print("Usage:\n\tpython {0} localhost 1337".format(sys.argv[0]))
sys.exit(1)
ports = [int(arg) for arg in sys.argv[2:]]
try:
for port_number in ports:
server = Thread(target=run_on, args=[port_number])
server.daemon = True # Do not make us wait for you to exit
server.start()
signal.pause() # Wait for interrupt signal, e.g. KeyboardInterrupt
except KeyboardInterrupt:
print "\nPython HTTP PUT Server Stoped."
sys.exit(1)
# ref: https://www.snip2code.com/Snippet/905666/Python-HTTP-PUT-test-server
@xax007
Copy link
Author

xax007 commented Nov 17, 2018

Upload file to HTTP PUT Server

Linux:

curl http://localhost:1337 --upload-file test.txt  # -T, --upload-file FILE  Transfer FILE to destination

Windows:

$output = Get-Content 1.txt
Invoke-RestMethod -Method PUT -Uri "http://localhost:1337" -Body $output

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment