Python HTTPServer 响应 curl 但不响应 Postman GET 请求
Python HTTPServer responding to curl but not to Postman GET request
考虑 Python3 中带有模块 BaseHTTPRequestHandler
的简单服务器。
import json
import urllib.parse
from http.server import BaseHTTPRequestHandler, HTTPServer
import bson.json_util
class GetHandler(BaseHTTPRequestHandler):
def do_GET(self):
print("/n=================================")
json_string = '{"hello":"world"}'
self.wfile.write(json_string.encode())
self.send_response(200)
self.end_headers()
return
if __name__ == '__main__':
#from BaseHTTPServer import HTTPServer
server = HTTPServer(('localhost', 3030), GetHandler)
print ('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
这是来自终端的 curl
正确响应:
curl -i http://localhost:3030/
但是,当尝试从 Postman 发送请求时,它没有响应。我尝试了 URL localhost:3030/
、http://localhost:3030/
以及环回地址。
这是为什么?
在我看到的所有示例中,它都没有指定内容类型,所以我做了同样的事情,看到 curl
有效,我并没有太担心。
但是应该指定内容类型:在self.wfile.write(...)
之前添加这些行解决问题:
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
请注意,实际上 self.send_response(200)
已被移动,而不是添加。
考虑 Python3 中带有模块 BaseHTTPRequestHandler
的简单服务器。
import json
import urllib.parse
from http.server import BaseHTTPRequestHandler, HTTPServer
import bson.json_util
class GetHandler(BaseHTTPRequestHandler):
def do_GET(self):
print("/n=================================")
json_string = '{"hello":"world"}'
self.wfile.write(json_string.encode())
self.send_response(200)
self.end_headers()
return
if __name__ == '__main__':
#from BaseHTTPServer import HTTPServer
server = HTTPServer(('localhost', 3030), GetHandler)
print ('Starting server, use <Ctrl-C> to stop')
server.serve_forever()
这是来自终端的 curl
正确响应:
curl -i http://localhost:3030/
但是,当尝试从 Postman 发送请求时,它没有响应。我尝试了 URL localhost:3030/
、http://localhost:3030/
以及环回地址。
这是为什么?
在我看到的所有示例中,它都没有指定内容类型,所以我做了同样的事情,看到 curl
有效,我并没有太担心。
但是应该指定内容类型:在self.wfile.write(...)
之前添加这些行解决问题:
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
请注意,实际上 self.send_response(200)
已被移动,而不是添加。