0

Snapd 有关于 REST API 的文档

我可以使用以下命令从 C# 连接到套接字

var snapSocket = new Socket(AddressFamily.Unix, SocketType.Stream, ProtocolType.IP);
var snapEndpoint = new UnixEndPoint("/run/snapd.socket");
snapSocket.Connect(snapEndpoint);
var req = Encoding.ASCII.GetBytes("GET /v2/system-info HTTP/1.1");
snapSocket.Send(req, req.Length, 0);
var bytesReceived = new byte[256];
var bytes = 0;
var response = "";
do
{
    bytes = snapSocket.Receive(bytesReceived, bytesReceived.Length, 0);
    response = response + Encoding.ASCII.GetString(bytesReceived, 0, bytes);
} while (bytes > 0);
Console.WriteLine(response);

但是一切都停止了snapSocket.Receive- 永远不会发送响应。我怀疑我发送的消息有问题。

4

2 回答 2

0

事实证明,它需要一个标准的 HTTP 请求,这意味着需要Host:一行、Connection: Close一行和最后两个 \ns。

该文档的以下声明...

虽然预计允许客户端通过 TCP 套接字使用 HTTPS 进行连接,但此时仅支持 UNIX 套接字。

... 仅意味着 HTTP STCP还不能工作 -即使使用 UNIX 套接字,HTTP 当前也是有效的请求格式

于 2017-09-06T15:56:06.553 回答
0

我根本不精通 C#,但也许这个 python 片段可以帮助找到一个解决方案:

import requests_unixsocket
session = requests_unixsocket.Session()
r = session.get('http+unix://%2Frun%2Fsnapd.socket/v2/snaps')
r.raise_for_status()
r.json()
于 2017-09-06T20:43:15.740 回答