2015-10-20 96 views
13

我想發送PING到Redis以檢查連接是否正常工作,現在我可以只安裝redis-cli,但我不想和curl已經在那裏。那麼我如何濫用curl來做到這一點?基本上,我需要關閉怎麼在這裏發:濫用cURL與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:' 

我能夠完全通過增加-A ""擺脫User-Agent的,但我無法找到任何其他爲休息。任何想法我可以做到這一點?

+0

Redis是一個TCP服務器,所以要麼使用netcat,要麼建立一個HTTP接口,如https://github.com/voidfiles/lark或https://github.com/nicolasff/webdis(如果你真的想做那!)。 – deltheil

回答

16

當你想使用curl時,你需要REST over RESP,比如webdis,tinywebdis或turbowebdis。見https://github.com/markuman/tinywebdis#turbowebdis-tinywebdis--cherrywebdis

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

沒有一個REST接口爲Redis的,您可以就使用netcat例如。

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

與netcat,你必須建立你自己的RESP協議。見http://redis.io/topics/protocol

+0

Netcat是完美的! – Mahoni

+2

整個printf的東西對我來說什麼都沒做,但是當我剛剛運行了nc命令並輸入了PING時,我又回到了PONG。 – snetch

+3

只是'回聲PING | NC本地主機6379'爲我工作得很好。 –

11

我需要睡眠添加到由@Markus提供的NC得到它從遠程系統的工作:

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

詳見Request/Response protocols and RTT: Redis Pipelining

+0

在AWS EC2到AWS ElastiCache Redis上,'sleep 1'對我來說是必要的,雖然'echo PING'與'printf' – davur

16

不捲曲,但並不需要一個HTTP接口或NC(偉大的東西就像一個容器,你沒有安裝NC)

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

應該給你

+PONG

您可以從this fantastic article瞭解更多關於正在發生的事情。

+3

真棒!這只是讓我的一天 –

+0

這對我有用,超級有用。你能解釋一下這些尖括號是怎麼回事嗎?我不知道該怎麼開始使用Google來查找這些內容。 –

+2

@EricHu'3 <>'打開文件描述符3作爲讀寫文件'/ dev/tcp/127.0.0.1/6379',然後'>&3'將stdout從回顯重定向到FD3和'<&3'重定向從FD3到頭部的stdin。 –