[英]Connect to python server using sockets in python 2.7
我使用python -m SimpleHTTPServer
在端口8000
上创建了python服务器。
当我从网络浏览器访问此URL时,它显示以下内容
现在,我想使用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
进行socket programming with python
的教程。 我不太喜欢官方教程。
当我尝试使用python接收内容时,我还观察到了一件奇怪的事情,那时候什么都没发生,我无法从Web浏览器访问localhost:8000
,但是一旦我杀死python程序,我就可以访问它。
可以说,通过python中的http获取内容的最简单方法是使用urllib2模块。 例如:
from urllib2 import urlopen
f = urlopen('http://localhost:8000')
for line in f:
print line
这将打印出SimpleHTTPServer托管的文件。
但是在s.recv(1024)之后什么也没有发生,它只是在那里等待并且什么也不打印。
您只需打开一个套接字并等待数据,但这不是HTTP协议的工作方式。 如果要接收响应,则必须先发送请求(基本上,必须告诉服务器要列出哪个目录或要下载哪个文件)。 如果确实愿意,可以使用原始套接字发送请求以训练您的技能,但是强烈建议使用适当的库(请参阅Matthew Adams的回复和urllib2
示例)。
当我尝试使用python接收内容时,我还观察到了一件奇怪的事情,那时候什么都没发生,我无法从Web浏览器访问localhost:8000,但是一旦我杀死python程序,我就可以访问它。
这是因为SimpleHTTServer是单线程的,并且不同时支持多个连接。 如果您要修复它,请在这里查看答案: BasicHTTPServer,SimpleHTTPServer和concurrency 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.