You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python3的urllib或requests库中使用Unix Socket发起请求

实现方案

该需求可以实现,以下分别提供requests库和urllib库的实现方式。

方案1:使用requests库实现

requests原生不支持Unix套接字请求,需要先安装配套扩展包:
pip install requests-unixsocket

代码示例:

import requests
from requests_unixsocket import UnixAdapter

# 创建会话对象
session = requests.Session()
# 挂载Unix套接字适配器,指定Docker套接字路径
session.mount('http://localhost', UnixAdapter('/var/run/docker.sock'))

# 发送请求,此处域名仅为符合HTTP格式要求,不会实际解析
response = session.get('http://localhost/images/json')
# 打印返回的镜像列表
print(response.json())

方案2:使用urllib库实现

urllib不需要额外安装第三方包,可通过自定义Unix连接类实现:

import http.client
import json

# 自定义Unix套接字HTTP连接类
class UnixHTTPConnection(http.client.HTTPConnection):
    def __init__(self, socket_path, host='localhost', port=None, timeout=None, blocksize=8192):
        super().__init__(host, port, timeout, blocksize)
        self.socket_path = socket_path

    def connect(self):
        import socket
        self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        self.sock.connect(self.socket_path)
        if self.timeout is not None:
            self.sock.settimeout(self.timeout)

# 创建连接指定Docker套接字路径
conn = UnixHTTPConnection('/var/run/docker.sock')
# 发送请求
conn.request('GET', '/images/json')
# 读取并解析响应
response = conn.getresponse()
data = json.loads(response.read().decode('utf-8'))
print(data)
# 关闭连接
conn.close()

注意事项

  • 运行代码的用户需要持有/var/run/docker.sock的读写权限,否则会触发权限报错,可通过将用户加入docker用户组或使用sudo运行代码解决。
  • 请求中的域名仅为满足HTTP协议格式要求,不会实际进行DNS解析,填写任意合法域名均可正常运行。

内容的提问来源于stack exchange,提问作者Umar Draz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 06:42:00