Hiyo,
我已经设置了一个带有GET请求的Python服务器似乎有效,但出于某种原因,我无法将任何内容发送回请求客户端,该客户端使用Javascript编码。
Python服务器:
import time
import BaseHTTPServer
HOST_NAME = 'localhost'
PORT_NUMBER = 8000
class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_HEAD(s):
s.send_response(200)
s.send_header("Content-type", "text/html")
s.end_headers()
def do_GET(s):
print "here i am, in python" #this prints, so i know i'm in here
"""Respond to a GET request."""
s.send_response(200)
s.send_header("Content-type", "application/json")
s.send_header("Access-Control-Allow-Origin", "*")
s.send_header("Access-Control-Expose-Headers", "Access-Control-Allow-Origin")
s.send_header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
s.end_headers()
s.wfile.write("test1")
return "test2"
# If someone went to "http://something.somewhere.net/foo/bar/",
# then s.path equals "/foo/bar/".
s.wfile.write("<p>You accessed path: %s</p>" % s.path)
s.wfile.write("</body></html>")
if __name__ == '__main__':
server_class = BaseHTTPServer.HTTPServer
httpd = server_class((HOST_NAME, PORT_NUMBER), MyHandler)
print time.asctime(), "Server Starts - %s:%s" % (HOST_NAME, PORT_NUMBER)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close()
print time.asctime(), "Server Stops - %s:%s" % (HOST_NAME, PORT_NUMBER)
Javascript客户端:
$.ajax({
method: "GET",
url: "http://localhost:8000",
success:function(result){
console.log("success"); //does not print
console.log(result); //does not print
},
failure:function(err){
console.log("couldn't make it"); //does not print
}
});
所以我想要的是从JS向Py发送GET请求,并从服务器获得一些反馈。唉,除"here i am, in python"
之外什么都不打印,这表明我在服务器的GET代码中,但没有任何东西被发回。
任何想法?
谢谢!
更新
好的,在用eton的建议调整后,我从成功函数中“成功”打印。
还会打印result
参数,但它是空的。
do_GET现在看起来像这样:
def do_GET(s):
print "here i am, in python"
# """Respond to a GET request."""
s.send_response(200)
s.wfile.write("test1")
s.send_header("Content-type", "text/html")
# s.send_header("Content-type", "application/json")
s.send_header("Access-Control-Allow-Origin", "*")
s.send_header("Access-Control-Expose-Headers", "Access-Control-Allow-Origin")
s.send_header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
s.end_headers()
也许我回错了?我不知道。一直在阅读文档和其他帖子但到目前为止无济于事。
再次感谢
答案 0 :(得分:0)
实际上,使用此代码,JS客户端将无限期地等待响应。您需要设置Content-length标头以告诉JS客户端何时应该停止等待更多字节。
在您的情况下,这转换为:
self.send_header("Content-Length", str(len('test1')))