So I have created a website, when the user tries to fill out the login form (username and password), the following error message is displayed:
Error response
Error code: 501
Message: Unsupported method ('POST').
Error code explanation: HTTPStatus.NOT_IMPLEMENTED - Server does not support this operation.
For the server im using Python 3 http.server. To start the server i have a batch file containing the following code:
python -m http.server 80
I'm looking for a way to receive the login credentials the user submitted, and store them in a text file (.txt).
After doing some research I got the impression I need to create a PHP script, i have no idea how to do this. here is my attempt at it:
<?php
$username = htmlspecialchars($_POST['username']);
$password = htmlspecialchars($_POST['password']);
echo $username, ' ', $password;
?>
Thank you @MonkeyZeus, I managed to solve the problem by making a few changes to your code.
import socketserver
import http.server
import logging
import cgi
PORT = 80
class ServerHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
logging.error(self.headers)
http.server.SimpleHTTPRequestHandler.do_GET(self)
def do_POST(self):
logging.error(self.headers)
form = cgi.FieldStorage(
fp=self.rfile,
headers=self.headers,
environ={'REQUEST_METHOD':'POST',
'CONTENT_TYPE':self.headers['Content-Type'],
})
for item in form.list:
logging.error(item)
http.server.SimpleHTTPRequestHandler.do_GET(self)
with open("data.txt", "w") as file:
for key in form.keys():
file.write(str(form.getvalue(str(key))) + ",")
Handler = ServerHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
httpd.serve_forever()
When the post request is received, a text file called "data" is created. A for loop is then used to iterate through the keys (source) and write there values to the file.