Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 8, 2013 15:28:07

asdf
От:
Зарегистрирован: 2012-02-12
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Twisted TimeoutError

Добрый день.
Данный прокси сервер выдает TimeoutError при загрузке некоторых страниц. Страница грузится почти сразу и почти полностью, вместе с картинками и CSS. Не отображаются в браузере только несколько картинок со страницы. Затем браузер показывает что все еще грузит страницу(~10 сек.), но эти картинки не отображаются. Затем сервер выдает ошибку, раз 8.
Вот ошибка
http://pastebin.com/dsTvvWuk
Код twisted, почти как в учебнике(twisted network programming), начинает обрабатывать запрос с process, достает url из запроста и загружает страницу через agent.

from twisted.internet import protocol, reactor
from twisted.web import http
from twisted.web.client import Agent
from twisted.internet.defer import Deferred
import sys
class MyRequest(http.Request):
	
  	def process(self):                       
		agent = Agent(reactor)
		d = agent.request('GET', self.uri) #no headers  загрузка страницы через agent
		d.addCallbacks(self.GetRespnse, self.Errorr)
		d.addCallback(self.SendResp)	
	
	def GetRespnse(self, resp):
		up = Deferred()
		self.hedrs = resp.headers #сохраняю заголовки ответа
		resp.deliverBody(GetFullResp(up))  #получаю весь ответ
		print 'full resp triggered'
		return up		
	
	def Errorr(self, fail):
		print >>sys.stderr, fail
	def SendResp(self, data):
		self.setResponseCode(200)
 		i = self.hedrs.getAllRawHeaders()
		for u, v in i:
			self.setHeader(u, ''.join(v)) # вставка заголовков
		self.write('')
		self.write(data) 
		self.finish()
		
class GetFullResp(protocol.Protocol):
	def __init__(self, up):
		self.up = up
		self.data = ''
	def dataReceived(self, data):
		self.data += data
	def connectionLost(self, reason):
		print 'passing to callback'
		self.up.callback(self.data) #отправка ответа браузеру
		
class MyHttp(http.HTTPChannel):
	requestFactory = MyRequest
class MyHttpFactory(protocol.Factory):
	def buildProtocol(self, ptfactory):
		return MyHttp()
reactor.listenTCP(8000, MyHttpFactory())
reactor.run()



Отредактировано asdf (Дек. 8, 2013 18:20:54)

Офлайн

#2 Дек. 15, 2013 18:09:39

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Twisted TimeoutError

тебе ж написало

MyRequest instance has no attribute 'hedrs'

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version