0

8000我使用在端口上创建了一个 python 服务器python -m SimpleHTTPServer

当我从我的网络浏览器访问此网址时,它会显示以下内容

在此处输入图像描述

现在,我想使用 python 获取上述内容。所以,为此我所做的是

>>> import socket
>>> s = socket.socket(
...     socket.AF_INET, socket.SOCK_STREAM)
>>> s.connect(("localhost", 8000))
>>> s.recv(1024)

但是在s.recv(1024)没有发生任何事情之后,它只是在那里等待并且什么也不打印。

所以,我的问题是如何使用 python 获得以上目录内容输出。也有人可以建议我一个关于socket programming with python. 我不太喜欢官方教程。

当我尝试使用 python 接收内容时,我还观察到一件奇怪的事情,当时没有任何反应,我无法localhost:8000从我的网络浏览器访问,但只要我杀死我的 python 程序,我就可以访问它。

4

2 回答 2

4

可以说,在 python 中通过 http 获取内容的最简单方法是使用 urllib2 模块。例如:

from urllib2 import urlopen
f = urlopen('http://localhost:8000')
for line in f:
    print line

这将打印出 SimpleHTTPServer 托管的文件。

于 2012-07-04T15:49:18.697 回答
3

但是在 s.recv(1024) 之后什么都没有发生,它只是在那里等待并且什么也不打印。

您只需打开一个套接字并等待数据,但这不是 HTTP 协议的工作方式。如果您想收到响应,您必须先发送请求(基本上,您必须告诉服务器您要列出哪个目录或下载哪个文件)。如果您真的想要,您可以使用原始套接字发送请求来训练您的技能,但强烈建议使用适当的库(请参阅 Matthew Adams 的回复和urllib2示例)。

当我尝试使用 python 接收内容时,我还观察到一件奇怪的事情,当时没有任何反应,我无法从我的网络浏览器访问 localhost:8000,但是一旦我杀死我的 python 程序,我就可以访问它。

这是因为 SimpleHTTServer 是单线程的,不支持同时多个连接。如果您想修复它,请查看此处的答案:BasicHTTPServer、SimpleHTTPServer 和并发

于 2012-07-04T16:47:43.240 回答