http.server-不支持的方法('POST')

时间:2018-08-03 17:35:50

标签: php python-3.x http webserver

因此,我创建了一个网站,当用户尝试填写登录表单(用户名和密码)时,显示以下错误消息:

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;
?>

2 个答案:

答案 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之类的哈希的信息:

https://wiki.php.net/rfc/argon2_password_hash