首页 > 解决方案 > 有路径时的套接字编程

问题描述

对于蟒蛇

因此,如果您进行套接字编程,您将分别做一个主机和端口,例如 localhost 和 9999

如果你有一个路径而不是端口你有一个路径,例如 localhost/foo

你是否仍然可以在没有端口号和路径的情况下编写服务器和客户端连接,例如 localhost/foo

如果不是,那么 http 库是否可以工作,就像在顶部而不是 import socket u 类型 import http 并使用 http 库所拥有的东西而不是 socket 库

当你有像 localhost/foo 这样的路径但没有端口,即你没有像 localhost 和 9999 这样的主机和端口时,有没有办法在 python 中使用套接字

标签: python

解决方案


让我们看一下这张图片(在此处找到):

在此处输入图像描述

网络协议形成一个堆栈,上面的协议依赖于下面的协议。例如,当您给朋友写一封普通的信时,您所关心的只是用适当的语言写信,并在信封上写上正确的地址。所有的物流细节,不管你的信是用飞机还是火车,还是用鸽子送来的——都不关你的事,它们属于低级协议。反过来,邮政服务并不关心您的信件的内容,它只需要及时交付即可。

类似的事情发生在网络上。如图所示,HTTP 属于最高的应用层。HTTP 服务使用“URL”或“标头”或“内容类型”等概念,但底层 TCP 协议只关心将数据从一台主机传递到另一台主机。因此,诸如“主机”和“端口”之类的术语来自 TCP,而诸如“路径”之类的术语来自 HTTP。

例如,当您发送 HTTP 请求时http://hostname/foo,您的主机使用主机和端口信息(hostname并且80是默认端口)建立 TCP 连接,然后通过该连接发送 HTTP 请求,这/foo就是使用路径的地方。

现在,套接字 API 在传输层上运行,因此它对路径一无所知。您可以使用套接字 API 发送 HTTP 查询,但是:

  • 您需要非常了解 HTTP 的工作原理
  • 这是很多手工工作
  • 任何现有的 HTTP 库都在底层使用套接字

总而言之,您实际上并不需要为 HTTP 处理套接字。Python 有模块urllib.requesthttp.client,但用于此目的的最流行和易于使用的 Python 库是requests. 有了它,发送请求就这么简单:

import requests
response = requests.get('http://localhost/foo')

推荐阅读