Я хочу сделать запрос GET, чтобы проверить, является ли код возврата ожидаемым. Этот запрос встречается внутри функции, вызванной addCallback общей отложенной цепочки, как показано в следующем коде.Как сделать запрос HTTP Получить запрос с отложенным внутри другого (каскадное отсрочка)?
Мой конкретный вопрос, если: Как сделать возврат линии -D- прибывает на линию -E-?
Кажется, что вызывающая функция «cbResponse» (строка -D-) никогда не вызывается. Моя первая попытка заключалась в выполнении запроса и возврате в цепочку обратного вызова результат запроса (строка -A-). Он терпит неудачу, потому что объект deferr не имеет результата атрибута. Второй attemp (строка -B-) был возвращен отложенным объектом. Он также не возвращает результат. Третий attemp (строка -C-), который возвращает что-либо, но, очевидно, не имеет кода ответа запроса.
Большое спасибо!
from twisted.web.client import Agent
from twisted.web.http_headers import Headers
from twisted.internet import reactor, defer
class Test (object):
@classmethod
def getRequest (self, result):
print "Function getRequest"
agent = Agent(reactor)
d2 = agent.request('GET',
'http://www.google.com',
Headers({'User-Agent': ['Twisted Web Client Example']}),
None)
d2.addCallback(Test.cbResponse)
# 1 st attempt: return the result of d2. Fail: exceptions.AttributeError: Deferred instance has no attribute 'result'
return d2.result # --> line A
# 2nd attempt: return only the deferr object d2. Don't fail, but I can't get the result of the above request
### return d2 # --> line B
# 3rd attemp: return None (without return).
# --> line C
@classmethod
def cbResponse(response):
print 'Function cbResponse %s', response.code
# This is the return value I want to pass back to deferredChain function (called at line E)
return response.code # line --> D
@classmethod
def deferredChain(self):
d = defer.Deferred()
d.addCallback(Test.getRequest) # line --> E
d.callback("success")
return d.result # line --> F
if __name__ == '__main__':
tst = Test()
rtn = tst.deferredChain()
print "RTN: %s " % rtn
Пожалуйста, перефразируйте вопрос, потому что непонятно, в чем проблема и в чем вопрос. – pinturic
Извините @pinturic, я сделал настройку. Пожалуйста, посмотрите, ясно ли сейчас. –