Redis

2015-10-20 26 views
13
ile iletişim kurmak için kötüye kullanımı cURL

Bağlantı çalışıyor olup olmadığını kontrol etmek için PING Redis'e göndermek istiyorum, şimdi sadece redis-cli yükleyebilirim, ancak istemiyorum ve curl zaten orada. Peki bunu yapmak için curl'u nasıl kullanabilirim? Temelde ben burada göndermek ne kapatmanız gerekir: Ben başardı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:' 

tamamen -A "" ekleyerek User-Agent kurtulmak için, ama geri kalanı için başka bir şey bulamıyorum. Bunu nasıl yapabileceğime dair bir fikrin var mı?

+0

Redis bir TCP sunucusudur, ya netcat kullanın ya da https://github.com/voidfiles/lark ya da https://github.com/nicolasff/webdis gibi bir HTTP arayüzü kurun (gerçekten yapmak istiyorsanız o!). – deltheil

cevap

16

Kıvrılmak istediğinizde, webdis, tinywebdis veya turbowebdis gibi RESP üzerinden REST gerekir. Örneğin Netcat'i kullanabilirsiniz REDIS için REST yüzü olmadan https://github.com/markuman/tinywebdis#turbowebdis-tinywebdis--cherrywebdis

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

bakınız. netcat ile

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

kendi kendine göre RESP protokolü oluşturmak zorunda. http://redis.io/topics/protocol

+0

Netcat mükemmel! – Mahoni

+2

Tüm printf şeyi benim için bir şey yapmadı, ama nc komutunu çalıştırdığımda ve PING'de yazdığımda PONG'imi geri aldım. – snetch

+3

Sadece 'echo PING | nc localhost 6379’ benim için iyi çalıştı. –

11

Ben uzak bir sistemden işe gitmek için @Markus tarafından sağlanan nc bir uyku eklemek için gerekli Bkz:

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

Detaylar için Request/Response protocols and RTT: Redis Pipelining bakınız.

+0

AWS EC2'den AWS ElastiCache Redis'e, 'sleep 1 'benim için gerekliydi, bununla birlikte echo PING' printf' – davur

16

bukle değil, ama (yüklü nc Eğer yoksa bir kap gibi bir şey için harika) bir HTTP arayüzü veya nc

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

size

+PONG vermeli gerektirmez

Neler olup bittiği hakkında daha fazla bilgiyi this fantastic article'den edinebilirsiniz.

+3

harika olarak çalışıyor! Bu sadece benim gün –

+0

yaptı Bu benim için süper yardımcı oldu. Bu açılı ayraçlarla neler olduğunu açıklayabilir misiniz? Ne olduğunu öğrenmek için ne yapmaya başladığımdan emin değilim. –

+2

@EricHu '3 <>' 'dev/tcp/127.0.0.1/6379' dosyasına okuma-yazma olarak dosya tanıtıcı 3'ü açıyor, ardından'> & 3', stdout'u ekodan FD3'e ve '<& 3' yönlendirmelere yönlendiriyor FD3'ten başa stdin. –