2015-10-20 89 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。 –