HTTPServer Python отвечает на curl, но не на GET-запрос почтальона - PullRequest
2 голосов
/ 29 марта 2019

Рассмотрим простой сервер на 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/

Однако при попытке отправить запрос от Почтальона он не отвечает. Я пробовал URL localhost:3030/, http://localhost:3030/, а также с адресом обратной связи.

Почему это?

1 Ответ

1 голос
/ 01 апреля 2019

Во всех примерах, которые я видел, он не указывал тип контента, поэтому я сделал то же самое и, увидев, что curl сработал, я не слишком волновался.

Однако следует указать тип содержимого: добавление этих строк до того, как self.wfile.write(...) решит проблему:

self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()

Обратите внимание, что на самом деле self.send_response(200) было перемещено, а не добавлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...