python - 有路径时的套接字编程
问题描述
对于蟒蛇
因此,如果您进行套接字编程,您将分别做一个主机和端口,例如 localhost 和 9999
如果你有一个路径而不是端口你有一个路径,例如 localhost/foo
你是否仍然可以在没有端口号和路径的情况下编写服务器和客户端连接,例如 localhost/foo
如果不是,那么 http 库是否可以工作,就像在顶部而不是 import socket u 类型 import http 并使用 http 库所拥有的东西而不是 socket 库
当你有像 localhost/foo 这样的路径但没有端口,即你没有像 localhost 和 9999 这样的主机和端口时,有没有办法在 python 中使用套接字
解决方案
让我们看一下这张图片(在此处找到):
网络协议形成一个堆栈,上面的协议依赖于下面的协议。例如,当您给朋友写一封普通的信时,您所关心的只是用适当的语言写信,并在信封上写上正确的地址。所有的物流细节,不管你的信是用飞机还是火车,还是用鸽子送来的——都不关你的事,它们属于低级协议。反过来,邮政服务并不关心您的信件的内容,它只需要及时交付即可。
类似的事情发生在网络上。如图所示,HTTP 属于最高的应用层。HTTP 服务使用“URL”或“标头”或“内容类型”等概念,但底层 TCP 协议只关心将数据从一台主机传递到另一台主机。因此,诸如“主机”和“端口”之类的术语来自 TCP,而诸如“路径”之类的术语来自 HTTP。
例如,当您发送 HTTP 请求时http://hostname/foo
,您的主机使用主机和端口信息(hostname
并且80
是默认端口)建立 TCP 连接,然后通过该连接发送 HTTP 请求,这/foo
就是使用路径的地方。
现在,套接字 API 在传输层上运行,因此它对路径一无所知。您可以使用套接字 API 发送 HTTP 查询,但是:
- 您需要非常了解 HTTP 的工作原理
- 这是很多手工工作
- 任何现有的 HTTP 库都在底层使用套接字
总而言之,您实际上并不需要为 HTTP 处理套接字。Python 有模块urllib.request
和http.client
,但用于此目的的最流行和易于使用的 Python 库是requests
. 有了它,发送请求就这么简单:
import requests
response = requests.get('http://localhost/foo')
推荐阅读
- angularjs - 如何使后退按钮在角度状态下工作
- twitter-bootstrap-3 - 透明模态标题引导程序 3
- sql - PostgreSQL 使用来自 2 个表的数据,没有一个共同的值,而是一个布尔值
- discord.js - 分配或删除角色时如何在 Discord 上编辑嵌入消息
- python - 为什么代码无法用下划线替换空格
- node.js - 为什么对象没有在 express.Router() 的路由处理程序的回调中传递,从不同的模块导出?
- laravel - 使用 Laravel 对 JSON api 进行模型绑定
- mysql - mysql regexp 其中一些字符 + 1 个未知字符
- android - 如何序列化对象中相同类型的对象?
- javascript - 如何键入使用 Vue.extend 创建的 Vue 组件?