2010-09-17 5 views
0

de telnetConvertir l'entrée de telnet à une liste d'entrée tordue

 
GET /learn/tutorials/351079-weekend-project-secure-your-system-with-port-knocking?name=MyName&married=not+single&male=yes HTTP/1.1 
Host: merch1.localhost 
User-Agent: Mozilla/5.0 (Windows;en-GB; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11 
Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 
Accept-Language: en-gb,en;q=0.5 
Accept-Encoding: gzip,deflate 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive: 300 
Connection: keep-alive 

Comment puis-je obtenir cette entrée dans une liste .....?

je veux comme

a = ['GET /en/html/dummy.php?name=MyName&married=not+single&male=yes HTTP/1.1', 
    'Host: www.explainth.at', 
    'User-Agent: Mozilla/5.0 (Windows;en-GB; rv:1.8.0.11) Gecko/20070312 Firefox/1.5.0.11', 
    'Accept: text/xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 
    'Accept-Language: en-gb,en;q=0.5', 
    'Accept-Encoding: gzip,deflate', 
    'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7','Keep-Alive: 300'] 

ceci est une requête http reçue de telnet. J'ai utilisé EchoProtocol(basic.LineReceiver).

+0

Pouvez-vous décrire à quoi vous voulez que la liste ressemble? –

+0

C'est évidemment une requête HTTP GET, mais la question nécessite plus de contexte. D'où cela vient-il et qu'allez-vous en faire? S'il s'agissait d'une requête HTTP * à * Twisted Web, vous seriez confronté à un niveau d'abstraction plus élevé. –

+0

s'il vous plaît apprendre à formater votre texte. mettre quatre espaces avant qu'une ligne le marque comme du code et empêche les nouvelles lignes de s'effondrer. – aaronasterling

Répondre

1

En supposant que vous obtenez ces lignes de texte à partir d'un objet de type fichier texte f (peut-être sys.stdin, peu importe), list(f) ou f.readlines() sont presque ce que vous voulez, sauf qu'il ya des marqueurs de fin de ligne à la fin de chaque ligne. f.read().split('\n') peut être plus proche de ce que vous voulez (le même split appel fonctionne si vous avez le texte comme une chaîne s provenant d'une autre source, s.split('\n') est la liste que vous voulez).

0

Si vous avez lu la documentation LineReceiver, vous devriez avoir vu que toutes les lignes reçues sont passées à la méthode de rappel lineReceived de cette classe. Donc, la réponse à votre question est une classe qui ressemble à ceci:

from twisted.protocols.basic import LineReceiver 

class LineCollector(LineReceiver): 
    def connectionMade(self): 
     self.lines = [] 

    def lineReceived(self, line): 
     self.lines.append(line) 

Cela vous donne tout ce que vous avez demandé - votre entrée dans une liste, une ligne par entrée. Cependant, il est loin d'être clair pourquoi vous voulez cela. Si vous voulez réellement générer une réponse HTTP, c'est la mauvaise façon de le faire.

Questions connexes