Преобразование ввода из telnet в список в витой - PullRequest
0 голосов
/ 17 сентября 2010

вход от telnet

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

как я могу получить этот вход в список .....?

я хочу как

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']

это http-запрос, полученный от telnet.

Я использую EchoProtocol(basic.LineReceiver).

Ответы [ 2 ]

1 голос
/ 17 сентября 2010

Предполагая, что вы получаете эти строки текста из объекта, похожего на текстовый файл f (может быть sys.stdin, что угодно), list(f) или f.readlines() почти , что вы хотите, кроме что в конце каждой строки есть маркеры конца строки. f.read().split('\n') может быть ближе к тому, что вы хотите (тот же вызов split работает, если у вас есть текст в виде строки s из другого источника, s.split('\n') - это список, который вы хотите).

0 голосов
/ 17 сентября 2010

Если вы прочитали какую-либо документацию LineReceiver, вы должны были видеть, что все полученные строки передаются методу обратного вызова lineReceived этого класса.Итак, ответом на ваш вопрос является класс, который выглядит примерно так:

from twisted.protocols.basic import LineReceiver

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

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

Это дает вам именно то, что вы просили - ваш ввод в список, по одной строке на запись.Однако далеко не ясно, почему вы этого хотите.Если вы действительно хотите сгенерировать ответ HTTP, это неправильный способ сделать это.

...