我正在使用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
答案 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')
解决了!