Snapd 的 API 期望什么样的消息?
What sort of message does Snapd's API expect?
Snapd 有 documentation on a 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
- 永远不会发送响应。我怀疑我发送的消息有问题。
原来它期待的是一个标准的HTTP请求,也就是Host:
行,Connection: Close
行,两个\n
是必需的。
文档的以下声明...
While it is expected to allow clients to connect using HTTPS over a TCP socket, at this point only a UNIX socket is supported.
... 仅表示 HTTPS 和 TCP 尚不可用 - HTTP 是 即使在使用 UNIX 套接字时也是当前有效的请求格式。
我一点也不精通 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()
Snapd 有 documentation on a 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
- 永远不会发送响应。我怀疑我发送的消息有问题。
原来它期待的是一个标准的HTTP请求,也就是Host:
行,Connection: Close
行,两个\n
是必需的。
文档的以下声明...
While it is expected to allow clients to connect using HTTPS over a TCP socket, at this point only a UNIX socket is supported.
... 仅表示 HTTPS 和 TCP 尚不可用 - HTTP 是 即使在使用 UNIX 套接字时也是当前有效的请求格式。
我一点也不精通 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()