Seite 1 von 1

twisted protocol Problem

Verfasst: Mittwoch 13. Oktober 2010, 10:28
von blauschleiche
Hallo liebe Gemeinde,

bevor ich wahnsinnig werde, suche ich hier um Hilfe. Kann mit jemand erklären warum im meinem Script handleHeader und handleEndHeaders nie aufgerufen werden? handleHeader sollte doch mit jedem empfangenen Header aufgerufen werden.

Code: Alles auswählen

#!/usr/bin/env python
from twisted.internet import reactor, protocol
from twisted.web import client


def processResult(page):
	print "I got some data", repr(page)
	reactor.callLater(0.1, reactor.stop)
	
def dealWithError(err):
	print err.getErrorMessage()
	reactor.callLater(0.1, reactor.stop)

class testproto(client.HTTPPageGetter):
	
	def connectionMade(self):
		self.header_received = False
		method = getattr(self.factory, 'method', 'GET')
		self.sendCommand(method, self.factory.path)
		self.sendHeader('Host', self.factory.headers.get("host", self.factory.host))
		self.sendHeader('User-Agent', self.factory.agent)
		self.endHeaders()

	def handleEndHeaders(self):
		self.header_received = True
		print "header"

	def handleHeader(self,key,value):
		print key

	def dataReceived(self,bytes):
		#if self.header_received == True:
		#
			print bytes


class ProxyClientFactory(client.HTTPClientFactory):
	protocol = testproto
	
	def setURL(self, url):
		client.HTTPClientFactory.setURL(self, url)
		self.path = url

	def buildProtocol(self,addr):
		proto = protocol.ClientFactory.buildProtocol(self, addr)
		return proto

def main():
	factory = ProxyClientFactory('http://www.google.com')
	factory.deferred.addCallback(processResult)
	factory.deferred.addErrback(dealWithError)
	
	
	reactor.connectTCP('proxy', 8118, factory)
	reactor.run()
		

if __name__ == '__main__':
	main()

Re: twisted protocol Problem

Verfasst: Samstag 16. Oktober 2010, 18:10
von mjacob
Hallo,
in Deiner von HTTPPageGetter abgeleiteten Klasse hast du dataReceived überschrieben. So kann HTTPPageGetter die Daten nicht verarbeiten. Du musst die überschriebene Methode auch aufrufen. So zum Beispiel:

Code: Alles auswählen

def dataReceived(self, bytes):
    print bytes
    client.HTTPPageGetter.dataReceived(self, bytes)

Re: twisted protocol Problem

Verfasst: Montag 18. Oktober 2010, 12:49
von blauschleiche
Hi und vielen Dank für deine Antwort,

du hast natürlich Recht und genauso funktioniert es. Leider scheint das nirgends in der Dokumentation zu stehen. Bzw. ich habe das nicht gefunden. Die dataReceived verteilt die Aufrufe dann weiter, das habe ich aber nicht gewusst.
MfG