#python-3.x #get #postman #httpserver
#python-3.x #получить #postman #httpserver
Вопрос:
Рассмотрим простой сервер на 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/
а также с обратным адресом.
Почему это?
Комментарии:
1. Я думаю, что у curl и postman разные пользовательские агенты, что может привести к различиям в способе реагирования сервера. Проверьте также, что Postman отправляет GET, а не POST.
2. вы можете увидеть фактическую команду и тело, используемые postman для выполнения запроса. пожалуйста, опубликуйте это здесь.
3. Как я могу это сделать?
4. Можете ли вы перехватить оба запроса с помощью чего-то вроде fiddler и посмотреть, в чем разница?
5. Нет необходимости использовать fiddler. Postman имеет встроенную консоль, которая отображает детали каждого запроса.
Ответ №1:
Во всех примерах, которые я видел, не указывался тип содержимого, поэтому я поступил так же, и, увидев, что curl
сработало, я не слишком беспокоился.
Однако тип контента должен быть указан: добавление этих строк перед self.wfile.write(...)
решает проблему:
self.send_response(200)
self.send_header('Content-type', 'application/json')
self.end_headers()
Пожалуйста, обратите внимание, что на самом деле self.send_response(200)
был перемещен, а не добавлен.