cURL이 소켓에 요청을 보낼 수 있습니까?


75

에서 HTTP 서버를 실행 중이며 /var/run/my-server.sockcURL을 사용하여 간단한 요청을 보내서 테스트하고 싶습니다. cURL을 사용하여이 작업을 수행 할 수 있습니까? 전혀 할 수 있습니까, 아니면 리버스 프록시가 있어야합니까?

나는 이런 식으로 상상하고있다 :

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

답변:


107

이 기능은 curl에 추가되었습니다 7.40.

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

또 다른 예:

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

GET명시 적으로 가정하지 않고 명시 적으로 지정합니다 . 그리고 ( tail -f실시간 업데이트를 위해 ) 버퍼링하지 않습니다 .

(컬 컬 7.40 이상과 함께 제공되는 최초의 우분투 릴리스는 15.10이었습니다.)

cURL 7.50 이상 에서는 호스트 이름을 포함 하여 유효한 URL을 제공 해야하므로 cURL 7.50으로 위 예제를 실행하려면 "더미"호스트 이름을 추가해야합니다.

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

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

1
대단해!
Hubro

그리고이 예제에서 나는 결국 소켓에 들어가는 것을 볼 수 curl있습니다. 긴 라이브 도커!
spacediver

그건 그렇고, netcat 및 socat 예제는 더 이상 위에 없습니다 :]
Hubro

이것은 정말 유용합니다. 그러나이 작업을 수행하려고 curl --no-buffer -XGET --unix-socket tcp://192.168.99.102:2376 http://events하지만 curl 이 서버에 연결할 수 없습니다. 나는 루비 도커 라이브러리를 사용해
보았으며

1
@ user1513388 --unix-socketURI가 아닌에 대한 인수로 소켓 경로를 제공해야합니다 .
Hubro

8

확실하지 않지만이 티켓에 따라 :

사실이 아닌 것 같습니다.

이 당 :

socat 또는 nc가 할 수있는 것처럼 보입니다. 위의 코드에서 잘라냅니다.

# 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

나 자신을 시도하지 않았습니다.


4
그것은 당신이 \r\n\r\n아니라 마지막 에 제공 할 수있는 예외와 함께 작동\r\n echo -e "GET / HTTP/1.1\r\n\r\n"
TheRusskiy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.