使用aiohttp通过Unix Socket请求服务器报InvalidURL错误求助
解决aiohttp通过Unix Socket发起请求时的InvalidURL错误
错误原因
你遇到的InvalidURL: /test异常,核心原因是aiohttp客户端请求要求传入完整格式的URL——哪怕使用Unix Socket连接,也不能只传纯路径。内部URL解析逻辑必须识别协议(如http)和主机名部分,纯路径无法通过校验。
解决方案
只需将请求路径改为包含虚拟主机名的完整URL即可,UnixConnector会自动忽略主机名,直接使用指定的socket路径建立连接。修改后的代码示例:
from aiohttp import ClientSession, UnixConnector async def send_unix_socket_request(): async with ClientSession(connector=UnixConnector(path='.../server.sock')) as client: # 用localhost作为虚拟主机名,可替换为任意字符串 response = await client.post('http://localhost/test') # 按需处理响应,比如解析JSON result = await response.json() print(result)
也可以使用aiohttp支持的特殊URL格式(无需单独指定UnixConnector):
async with ClientSession() as client: # 格式规则:http://unix:/socket文件路径:/请求路径 response = await client.post('http://unix:/.../server.sock:/test')
两种方法都能解决InvalidURL问题,第一种更适合需要复用UnixConnector的场景。
内容的提问来源于stack exchange,提问作者N.Maxim
相关产品推荐
相关产品推荐

