2017-09-06 3 views
0

Snapd hat documentation on a REST API.Welche Art von Nachricht erwartet Snapd's API?

Ich bin an die Buchse von C# verbinden können Sie den folgenden

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); 

mit Aber alles hält an snapSocket.Receive - eine Antwort nie gesendet wird. Ich vermute, dass etwas nicht stimmt mit der Nachricht, dass ich es sende.

Antwort

0

Es stellt sich heraus, dass es eine Standard-HTTP-Anforderung erwartet, was bedeutet, eine Host: Leitung, eine Connection: Close Linie und zwei\n s am Ende erforderlich sind.

Die folgende Behauptung der Dokumentation ...

Während es Clients HTTPS über einen TCP-Socket zu verbinden ermöglichen erwartet verwendet, nur an dieser Stelle ein UNIX-Socket unterstützt wird.

... ist nur, dass HTTP S und TCP funktioniert noch nicht implizieren, - HTTP zur Zeit das gültige Anforderungsformat selbst ist, wenn der UNIX-Socket verwenden.

0

Ich bin nicht fließend in C# überhaupt, aber vielleicht Python-Schnipsel helfen zu einer Lösung führen kann:

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