将输入从telnet转换为扭曲的列表

时间:2010-09-17 02:39:46

标签: python http twisted

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

这是从telnet收到的http请求。

我正在使用EchoProtocol(basic.LineReceiver)

2 个答案:

答案 0 :(得分:1)

假设您从类似文本文件的对象f(可能sys.stdin,无论如何)获取这些文本行,list(f)f.readlines() 几乎你想要什么,除了每行末尾有行尾标记。 f.read().split('\n')可能更接近您想要的内容(如果您将来自其他来源的文字作为字符串split,则s调用相同s.split('\n')就是您的列表要)。

答案 1 :(得分:0)

如果您已阅读任何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响应,那么这是错误的方法。