Осуществляет ли twisted.web.http.HTTPClient обратный вызов при получении ВСЕХ ответов? - PullRequest
1 голос
/ 15 июня 2011

Документация гласит, что handleResponseEnd вызывается, когда ответ полностью получен.

http://twistedmatrix.com/documents/11.0.0/api/twisted.web.http.HTTPClient.html#handleResponseEnd

Однако отладка показывает, что это не всегда так.При выполнении нескольких запросов к одному и тому же URI, кажется, вызывается только для первого запроса.При выполнении нескольких запросов к различным URI, он все еще только вызывается для запроса FIRST.

Желательно ли такое поведение?Выполнение запросов к одному и тому же URI несколько раз почти имеет смысл, поскольку полученный ответ обычно «304 Не изменен», поэтому клиент не получает содержимое несколько раз.Тем не менее, я все еще ожидал бы, что обратный вызов будет запущен с сообщением «мы закончили получать ответ».

Существует ли другой обратный вызов, который был бы более подходящим для доступа к полному ответу?

Ответы [ 2 ]

0 голосов
/ 17 июня 2011

Я на самом деле понял это прошлой ночью. У меня есть дочерний класс, который наследуется от HTTPClient. При переопределении connectionMade я забыл вызвать connectionMade родителя. Поскольку connectionMade действует как конструктор по умолчанию для протокола, экземпляр не был настроен должным образом.

Хотя я не знаю всех деталей этого решения, оно оказалось надежным при тестировании. Происходящие аномалии исчезли.

0 голосов
/ 16 июня 2011

Обычно вы создаете новый HTTPClient для каждого запроса, вызывая buildProtocol() на своей фабрике.Это то, что HTTPPageGetter и Agent делают.

Единственным исключением является использование постоянных соединений HTTP.

Что вы делаете так, что вам нужно использовать тот же экземпляр протоколанесколько запросов?

...