因此,我创建了一个网站,当用户尝试填写登录表单(用户名和密码)时,显示以下错误消息:
Error response
Error code: 501
Message: Unsupported method ('POST').
Error code explanation: HTTPStatus.NOT_IMPLEMENTED - Server does not support this operation.
对于使用Python 3 http.server的服务器即时消息。要启动服务器,我有一个包含以下代码的批处理文件:
python -m http.server 80
我正在寻找一种方法来接收用户提交的登录凭据,并将其存储在文本文件(.txt)中。
做完一些研究后,我觉得我需要创建一个PHP脚本,我不知道该怎么做。这是我的尝试:
<?php
$username = htmlspecialchars($_POST['username']);
$password = htmlspecialchars($_POST['password']);
echo $username, ' ', $password;
?>
答案 0 :(得分:1)
谢谢@MonkeyZeus,我设法通过对代码进行一些更改来解决了这个问题。
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()
收到发布请求后,将创建一个名为“数据”的文本文件。然后使用for循环遍历键(source)并将那里的值写入文件。
答案 1 :(得分:-1)
https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501
似乎您的Web服务器上没有POST支持。尝试改用GET。
<?php
$username = htmlspecialchars($_GET['username']);
$password = htmlspecialchars($_GET['password']);
echo $username, ' ', $password;
?>
尽管您编写的代码只会打印用户详细信息,而不存储它们。但是,我建议启用POST并改用它。
编辑:正如另一个用户所指出的那样,GET是不安全的,不应将其用作密码。此方法可以使用,但是我建议不要使用它,而应该寻找一种在您的Web服务器中实现POST的方法。
我也不建议将密码存储在文本文件中。 PHP带有用于加密密码的内置方法。我建议阅读有关如何实现Argon2之类的哈希的信息: