【问题标题】:What sort of message does Snapd's API expect?Snapd 的 API 期望得到什么样的消息?
【发布时间】:2018-02-14 10:08:00
【问题描述】:

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 - 永远不会发送响应。我怀疑我发送的消息有问题。

【问题讨论】:

    标签: c# unix-socket snapcraft


    【解决方案1】:

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

    文档的以下声明...

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

    ... 仅表示 HTTPSTCP 还不能工作 - HTTP is 目前甚至是有效的请求格式使用 UNIX 套接字时。

    【讨论】:

      【解决方案2】:

      我一点 C# 都不流利,但也许这个 python sn-p 可以帮助找到一个解决方案:

      import requests_unixsocket
      session = requests_unixsocket.Session()
      r = session.get('http+unix://%2Frun%2Fsnapd.socket/v2/snaps')
      r.raise_for_status()
      r.json()
      

      【讨论】:

        猜你喜欢
        • 2012-02-05
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 2020-12-05
        • 1970-01-01
        相关资源
        最近更新 更多