我有一个问题,基于HttpServer的一个Python的Web服务器:错误:没有“访问控制允许来源”标头在Python Web服务器
简介: 我有摄像机的系统:每台电脑2个。每台计算机都有他的python web服务器来管理摄像机设置。相机设置存储在一个xml文件中。 然后我有另一台电脑用一个软件(在python中)管理摄像机的数据。此软件有一个设置文件在xml和一个web服务器在python
问题: 我做了一个接口在html/jquery中发送请求到服务器。 问题是,当我向位于“cameras computer”中的服务器发送一个Ajax请求,以获取位于另一个服务器中的页面上的xml文件。
这是AJAX请求:
$.ajax({
type: "GET",
url: "http://"+ipCompleto+":8081/"+$(this).attr("port")+"/default.xml",
dataType: "xml",
success: function(xml){
bordoBlob = $(xml).find('dimBordoBlob').text();
blobSize = $(xml).find('blobSize').text();
hMin = $(xml).find('intval1').text();
hMax = $(xml).find('intval2').text();
$("#inputHMax").val(hMax);
$("#titoloHMax").text(hMax);
$("#inputHMin").val(hMin);
$("#titoloHMin").text(hMin);
$("#minBlobSizeValue").val(blobSize);
$("#minBlobSizeTitle").text(blobSize);
$("#blobBorderSizeValue").val(blobSize);
$("#blobBorderSizeTitle").text(blobSize);
},
error: function() {
alert("An error occurred while processing XML file.");
}
});
这是服务器:
#!/usr/bin/env python
from http.server import BaseHTTPRequestHandler, HTTPServer
from xml.dom import minidom
import os
import time
from stat import *
class MyHandler(BaseHTTPRequestHandler):
def do_POST(self):
self.data_string = self.rfile.read(int(self.headers['Content-Length']))
self.send_response(200)
self.end_headers()
valore = str(self.data_string)[2:-1]
response = ["",""]
response[0],response[1] = processData(valore)
if response[0] == 1:
sep = ""
message = ""
for res in response[1]:
message += res
response = sep.join(message)
self.wfile.write(bytes(message, "utf-8"))
def do_GET(self):
# Send response status code
self.send_response(200)
self.send_header('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0')
# Send headers
if self.path.endswith("html"):
self.send_header('Content-type', 'text/html')
self.end_headers()
elif self.path.endswith("css"):
self.send_header('Content-type', 'text/css')
self.end_headers()
elif self.path.endswith("xml"):
self.send_header('Content-type', 'text/xml')
self.end_headers()
elif self.path.endswith("js"):
self.send_header('Content-type', 'application/javascript')
self.end_headers()
if not self.path.endswith("jpeg") and not self.path.endswith("jpg") and not self.path.endswith("png") and not self.path.endswith("gif"):
with open(self.path[1:], 'r') as myfile:
data = myfile.read()
# Write content as utf-8 data
self.wfile.write(bytes(data, "utf8"))
if self.path.endswith("jpeg"):
f = open(self.path[1:], 'rb')
self.send_response(200)
self.send_header('Content-type', 'image/jpeg')
self.send_header('Cache-Control', 'no-store')
self.end_headers()
self.wfile.write(f.read())
f.close()
elif self.path.endswith("png"):
f = open(self.path[1:], 'rb')
self.send_response(200)
self.send_header('Content-type', 'image/png')
self.end_headers()
self.wfile.write(f.read())
f.close()
elif self.path.endswith("gif"):
f = open(self.path[1:], 'rb')
self.send_response(200)
self.send_header('Content-type', 'image/gif')
self.end_headers()
self.wfile.write(f.read())
f.close()
elif self.path.endswith("jpg"):
f = open(self.path[1:], 'rb')
self.send_response(200)
self.send_header('Content-type', 'image/jpeg')
self.end_headers()
self.wfile.write(f.read())
f.close()
return
def run():
print('starting server...')
# Server settings
# Choose port 8080, for port 80, which is normally used for a http server, you need root access
server_address = ('192.168.2.245', 8081)
httpd = HTTPServer(server_address, MyHandler)
print('running server...')
httpd.serve_forever()
def processData(data):
XMLlist = []
data = data.split(":")
field = data[0].split(">")
print(data,field,data[2])
try:
exists = field[2]
except:
exists = False
if data[0] == "XMLlist":
path = os.path.realpath(__file__)
path = os.path.dirname(path)
path = path+"/"+data[2]
for filename in os.listdir(path):
if filename.endswith('.xml'):
XMLlist.append(filename[:-3])
return 1,XMLlist
elif exists != False:
file = open(data[2]+data[3], 'r')
tree = minidom.parse(file)
camera = tree.getElementsByTagName(field[0])
for element in camera:
if element.getAttribute('id') == str(field[1]):
print(data[1], field[0], field[1], field[2])
element.getElementsByTagName(field[2])[0].childNodes[0].replaceWholeText(data[1])
file = open(data[2]+data[3], 'w')
tree.writexml(file)
file.close()
return 0, 0
else:
print(data)
file = open(data[2]+data[3], 'r')
tree = minidom.parse(file)
tree.getElementsByTagName(data[0])[0].childNodes[0].replaceWholeText(data[1])
file = open(data[2]+data[3], 'w')
tree.writexml(file)
file.close()
return 0, 1
run()
谢谢你的答案和我的英语不好对不起!
非常感谢你的。我会尽量按照答案!我会告诉你... –