使用http.server模块处理POST请求

时间:2019-10-14 10:52:18

标签: python-3.x

我正在使用Python 3.7.4和http.server模块接收包含来自ERP的文件的POST请求。

除ERP收到连接超时错误外,其他一切正常(文件已正确接收和写入)。

这是我第一次使用http.server,它看起来很简单,但是可以肯定我缺少什么。

请参见下面的代码,“ self.send_response(200)”不够吗?

在ERP供应商网站上,他们提供了一个PHP示例来接收数据:

if (move_uploaded_file ($_FILES['file']['tmp_name'], "items.xml")){
    echo "OK";
} else {
    echo "Error";
}

因此,成功连接/传输后,ERP希望“确定”

这是我的Python代码:

from http.server import BaseHTTPRequestHandler, HTTPServer
import time
import cgi

class Test_Server(BaseHTTPRequestHandler):
    def do_POST(self):
        print("POST request received")
        self.send_response(200)
        form = cgi.FieldStorage(fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD': 'POST', 'CONTENT_TYPE': self.headers['Content-Type'],})
        f = open("data/test-orig.xml","wb+")
        f.write(form['file'].value)
        f.close()

httpd = HTTPServer((hostName, hostPort), Test_Server)

print(time.asctime(), "Server Starts - %s:%s" % (hostName, hostPort))

try:
    httpd.serve_forever()
except KeyboardInterrupt:
    pass

httpd.server_close()
print(time.asctime(), "Server Stops - %s:%s" % (hostName, hostPort))

最诚挚的问候,

cid

1 个答案:

答案 0 :(得分:0)

设法通过Flask轻松做到这一点:

from flask import Flask
from flask import request

app = Flask(__name__)

@app.route('/post-data', methods=['POST'])
def test_server():
    data = request.files['file']
    data.save('data/test.xml')
    return "OK"

if __name__ == '__main__':
    app.run(host='0.0.0.0')

解决了!