Я не уверен, почему приведенный ниже код приводит к двум отправленным ответам, а не одному.
from twisted.web.server import Site
from twisted.web.resource import Resource
from twisted.internet import reactor
from optparse import OptionParser
class FormPage(Resource):
isLeaf = True
def render_GET(self, request):
return "<html><HEAD></HEAD><body>OK</body></html>"
def render_POST(self, request):
return "<html><HEAD></HEAD><body>OK</body></html>"
parser = OptionParser()
parser.add_option("-p", dest="port",type="int",default=80,
help="Local Port to listen ON")
parser.add_option("-u", dest="form1",default="api",
help="URL form page")
parser.add_option("-w", dest="form2", default="name",
help="URL form page")
(options, args) = parser.parse_args()
print 'Messaging App Server will receive messages posted to "0.0.0.0:%d/%s/%s"' % (options.port, options.form1, options.form2)
root = FormPage()
root.putChild("%s" % options.form1, FormPage())
root.putChild("%s" % options.form2, FormPage())
print("\nroot = %s\n" % root)
factory = Site(root)
reactor.listenTCP(options.port, factory)
reactor.run()
Я запускаю приведенный выше код на своем сервере следующим образом:
python filename.py
Затем я открываю браузер и введите URL-адрес следующим образом:
192.168.x.y/api/name
И, как и ожидалось, я получаю следующий ответ:
ok
Однако, когда у меня одновременно работает tcpdump, я вижу, что render_GET вызывается дважды, а не один раз, но я не понимаю, почему?
Может ли кто-нибудь предложить решение / совет?
У меня такое ощущение, что я неправильно понимаю функцию putChild ().Моя цель - добавить путь к IP-адресу.Насколько я понимаю, этот фрагмент кода создает ресурс, который будет соответствовать корню иерархии URL
root = FormPage()
Итак, с установленным корнем я затем добавляю дочерние элементы:
root.putChild("%s" % options.form1, FormPage())
root.putChild("%s" % options.form2, FormPage())
Насколько мне известно, это вызывает извлечение корня, затем «api», а затем «name».
Это тот случай, когда я получаю «ok», возвращаемую для вызова «api»а затем несколько минут спустя для «имени»?
Если мое предположение верно, как мне добавить путь api / name, чтобы не было двух вызовов, то есть только одного «ок»?