1

嗨哟,

我已经设置了一个带有 GET 请求的 Python 服务器,该请求似乎可以工作,但由于某种原因,我无法将任何内容发送回请求客户端,该客户端是用 Javascript 编码的。

蟒蛇服务器:

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() 

也许我退回错了?我不知道。一直在阅读文档和其他帖子,但到目前为止无济于事。

再次感谢

4

1 回答 1

0

实际上,使用此代码,JS 客户端将无限期地等待响应。您需要设置 Content-length 标头来告诉 JS 客户端何时应该停止等待更多字节。

在您的情况下,这转化为:

self.send_header("Content-Length", str(len('test1')))
于 2018-05-07T09:43:09.567 回答