Python 侦听HTTP响应
我正在尝试编写一个python应用程序,它将侦听套接字上的HTTP响应。我用这个。这是我的密码:Python 侦听HTTP响应,python,http,Python,Http,我正在尝试编写一个python应用程序,它将侦听套接字上的HTTP响应。我用这个。这是我的密码: #!/usr/bin/env python import socket from http_parser.http import HttpStream from http_parser.reader import SocketReader from http_parser.util import b def main(): s = socket.socket(socket.AF_INE
#!/usr/bin/env python
import socket
from http_parser.http import HttpStream
from http_parser.reader import SocketReader
from http_parser.util import b
def main():
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 7000))
s.listen(5)
try:
while True:
p = HttpStream(SocketReader(s))
finally:
s.close()
if __name__ == "__main__":
main()
我有两个问题:
#!python
# -*- coding: utf-8 -*-
import optparse
import urllib2
from django.utils import unittest
# just a sample of settings
HOST = 'localhost'
class GIOPTest(unittest.TestCase):
def test_basic(self):
#TEST GOES HERE
if __name__ == '__main__':
# This part is to accept command line parameters
option_list = ( # check optparse help for more options
make_option("--host",
action = 'store',
type = 'string',
dest = 'host',
default = 'localhost',
help = 'Server host (localhost by default)'
),
)
parser = OptionParser(option_list=option_list)
options, args = parser.parse_args()
HOST = options.host
# run the test
unittest.main()
- 将web浏览器指向
http://localhost:7000
到本地主机上的端口7000,并键入原始HTTP请求telnet
- 使用
自动执行上述操作,例如:nc
echo -e 'GET / HTTP/1.1\n\n' | nc localhost 7000
术语说明:用HTTP的说法,您在绑定套接字上监听的是HTTP请求;您发送回连接客户端的是一个响应。如果您使用apache作为服务器,将数据重定向到服务器,则可以使用apache基准测试(ab-据我所知,您必须是超级用户才能使用它)来测试它。。。还将帮助评估应用程序对整体性能的影响,例如
ab -n 500 -c 20 http://localhost:7000/
其中after-n是测试过程中与服务器建立的连接总数,after-c是apache benchmark将建立的并发连接数,使用这些连接的不同值进行实验,并阅读其手册,无论您的具体目的是什么,您可能会发现更多有用的选项。我最终使用了一个原始套接字并直接从中读取数据包。我认为TCP抽象级别对我来说很好。我在无限循环中添加了一个
print p.headers()
调用,现在它抛出了一个错误Transport endpoint not connected
,我找不到在django
中模拟响应的方法。这就是您的意思吗?您可能应该传递一个从连接接收的套接字:conn,address=s.accept()。。。SocketReader(康涅狄格州)
。为什么不使用任何现有的http服务器?我不需要服务器,我想要侦听http响应。侦听和接受连接的部分传统上称为服务器。等等,您想要“转移”响应,这意味着阻止它返回到客户端?或者您只是想窃听客户机/服务器通信?不管怎样,这听起来像是中间人的恶作剧。我实际上是在尝试将响应传递给客户机和第三个框。这看起来像是攻击,但这是我需要做的!在问题中添加了拓扑。你能回答一下你是怎么做到的吗,我实际上也在做同样的事情。