Рассмотрим простой сервер на 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/, а также с петлевым адресом.
Почему это?
вы можете увидеть фактическую команду и тело, используемые почтальоном для выполнения запроса. Пожалуйста, разместите это здесь.
Как я могу это сделать?
Можете ли вы захватить оба запроса чем-то вроде fiddler и посмотреть, в чем разница?
Нет необходимости использовать скрипач. Postman имеет встроенную консоль, которая отображает детали каждого запроса.
Спасибо вам всем. На самом деле проблема заключалась в указании типа контента. Смотрите мой ответ.





Во всех примерах, которые я видел, тип контента не указывался, поэтому я сделал то же самое и, увидев, что curl работает, я не слишком беспокоился.
Однако следует указать тип контента: добавление этих строк перед self.wfile.write(...) решает проблему:
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
Обратите внимание, что на самом деле self.send_response(200) был перемещен, а не добавлен.
Я думаю, что curl и postman имеют разные пользовательские агенты, что может привести к различиям в реакции сервера. Убедитесь также, что Postman отправляет GET, а не POST.