2015-10-20 6 views
13

Ich möchte an Redis eine PING senden, um zu überprüfen, ob die Verbindung funktioniert, jetzt konnte ich nur redis-cli installieren, aber ich will nicht und curl ist bereits da. Also, wie kann ich curl missbrauchen, um das zu tun? Grundsätzlich muß ich abschalten, was die hier senden:Missbrauch cURL zur Kommunikation mit Redis

> GET/HTTP/1.1 
> User-Agent: curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
> Host: localhost:6379 
> Accept: */* 
> 
-ERR wrong number of arguments for 'get' command 
-ERR unknown command 'User-Agent:' 
-ERR unknown command 'Host:' 
-ERR unknown command 'Accept:' 

ich war in der Lage, um loszuwerden, die User-Agent insgesamt durch -A "" Zugabe, aber ich kann nichts anderes für den Rest finden. Irgendeine Idee, wie ich das machen kann?

+0

Redis ist ein TCP-Server, entweder netcat verwenden oder eine HTTP-Schnittstelle wie https://github.com/voidfiles/lark oder https://github.com/nicolasff/webdis einrichten (wenn Sie wirklich wollen Das!). – deltheil

Antwort

16

Wenn Sie curl verwenden möchten, benötigen Sie REST über RESP, wie webdis, tinywebdis oder turbowebdis. Siehe https://github.com/markuman/tinywebdis#turbowebdis-tinywebdis--cherrywebdis

$ curl -w '\n' http://127.0.0.1:8888/ping 
{"ping":"PONG"} 

Ohne eine REST-Schnittstelle für redis Sie netcat zum Beispiel verwenden können.

$ (printf "PING\r\n";) | nc localhost 6379 
+PONG 

Mit netcat müssen Sie das RESP-Protokoll selbst erstellen. Siehe http://redis.io/topics/protocol

+0

Netcat ist perfekt! – Mahoni

+2

Das ganze printf-Ding hat nichts für mich getan, aber als ich einfach den nc-Befehl ausgeführt und den PING eingegeben habe, habe ich meinen PONG zurückbekommen. – snetch

+3

Nur 'echo PING | NC Localhost 6379' funktionierte gut für mich. –

11

Ich brauchte einen Schlaf die nc von @Markus bereitgestellt hinzufügen, um es von einem entfernten System zu arbeiten:

(printf "PING\r\n"; sleep 1) | nc remote.redis.hostname 6379 

Siehe Request/Response protocols and RTT: Redis Pipelining für weitere Einzelheiten.

+0

Bei AWS EC2 bis AWS ElastiCache Redis war die 'sleep 1' für mich notwendig, obwohl' echo PING' genauso gut funktioniert wie die 'printf' – davur

16

Nicht curl, aber nicht über eine HTTP-Schnittstelle oder nc (groß für so etwas wie ein Container, in dem Sie nicht nc installiert ist) erfordert

exec 3<>/dev/tcp/127.0.0.1/6379 && echo -e "PING\r\n" >&3 && head -c 7 <&3

Sollten Sie

+PONG

Sie können mehr über das, was los ist, von this fantastic article lesen.

+3

super! das hat meinen Tag einfach gemacht –

+0

Das hat für mich funktioniert, super hilfreich. Können Sie erklären, was mit diesen spitzen Klammern passiert? Ich bin mir nicht sicher, was ich anfangen soll zu googeln, um herauszufinden, was das ist. –

+2

@EricHu '3 <>' Öffnet den Dateideskriptor 3 als Read-Write in die Datei '/ dev/tcp/127.0.0.1/6379', dann'> & 3' leitet stdout vom Echo zu FD3 und '<& 3' Weiterleitungen um Standard von FD3 in Kopf. –