O cURL pode enviar solicitações para soquetes?

75

Eu tenho um servidor HTTP em execução /var/run/my-server.socke quero testá-lo enviando uma solicitação simples usando cURL. Isso pode ser feito usando cURL? Isso pode ser feito ou deve haver um proxy reverso?

Estou imaginando algo assim:

curl socket:/var/run/my-server.sock:/test/path
Hubro
fonte

Respostas:

107

O recurso foi adicionado em curl 7.40.

curl --unix-socket /var/run/docker.sock http:/images/json

Outro exemplo:

curl --no-buffer -XGET --unix-socket /docker.sock http:/events

O que especifica o GETexplicitamente (em vez de assumido). E não será armazenado em buffer (para tail -fatualização em tempo real).

(A primeira versão do Ubuntu a ser fornecida com o curl 7.40 ou mais recente foi 15.10).

O cURL 7.50 ou superior exige que seja fornecido um URL válido , incluindo um nome de host, para executar os exemplos acima com o cURL 7.50, um nome de host "fictício" deve ser adicionado, por exemplo:

curl --unix-socket /var/run/docker.sock http://localhost/images/json

e

curl --no-buffer -XGET --unix-socket /docker.sock http://localhost/events
Dreamcat4
fonte
1
Isso é incrível!
Hubro
E neste exemplo, vejo o próprio encaixe no qual eu estava indo, curlafinal. Viva o Docker!
Spacediver 12/08/2015
A propósito, os exemplos netcat e socat não estão mais acima :]
Hubro 25/08
Isso é realmente útil. No entanto, estou tentando fazer isso, curl --no-buffer -XGET --unix-socket tcp://192.168.99.102:2376 http://eventsmas o curl não pode se conectar ao servidor. Eu tentei usar a biblioteca ruby janela de encaixe e ele se conecta muito bem usando esta
user1513388
1
@ user1513388 Tenho certeza que você precisa fornecer o caminho para um soquete como argumento --unix-socket, não para um URI.
Hubro 29/03
8

Não tenho certeza, mas de acordo com este ticket:

não parece ser o caso.

Por isso:

parece que socat ou nc podem fazê-lo, troque o trecho acima:

# Socat version
echo -e "GET /images/json HTTP/1.1\r\n" | socat unix-connect:/var/run/docker.sock STDIO

# nc version (netcat-freebsd)
echo -e "GET /images/json HTTP/1.0\r\n" | nc -U /var/run/docker.sock

Também não tentei.

chuva constante
fonte
4
ele trabalha com a exceção de que você pode fornecer \r\n\r\n, no final, não\r\n echo -e "GET / HTTP/1.1\r\n\r\n"
TheRusskiy