【问题标题】:Connect to python server using sockets in python 2.7在 python 2.7 中使用套接字连接到 python 服务器
【发布时间】:2012-07-04 15:40:01
【问题描述】:

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

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

现在,我想使用 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 接收内容时,我还观察到一件奇怪的事情,当时什么也没发生>

【问题讨论】:

  • 你需要的不是socket编程,而是HTTP协议规范。此外,根据您编写程序的目的,您可以使用一些模块为您讲 HTTP...

标签: python sockets python-2.7


【解决方案1】:

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

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

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

【讨论】:

  • 那么,如果我明白我想要实现的目标是无法使用套接字实现的,对吧?
  • @Noob 好吧,对于我认为您正在尝试做的事情,您需要套接字,但您不需要直接使用它们。本质上,IP 使用套接字,TCP 使用 IP,HTTP 使用 TCP。您不想重建所有这些只是为了访问网站上的数据。
【解决方案2】:

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

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

当我尝试使用 python 接收内容时,我还观察到一件奇怪的事情,当时什么也没发生>

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

【讨论】:

    猜你喜欢
    • 2021-02-11
    • 1970-01-01
    • 2023-02-08
    • 2022-11-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    • 2023-01-03
    • 1970-01-01
    相关资源
    最近更新 更多