curl
のversion >= 7.40.0
から、--unix-socket
オプションが有効になりました。
$ curl -V
curl 7.43.0 (x86_64-apple-darwin13.4.0) libcurl/7.43.0 SecureTransport zlib/1.2.5
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtsp smb smbs smtp smtps telnet tftp
Features: IPv6 Largefile NTLM NTLM_WB SSL libz UnixSockets
でバージョンが 7.40.0以降なら、
$ curl --unix-socket /path/to/socket <hostname>
こんな感じでいけます。<hostname>
には任意のホスト名を入力します。ここで指定したホスト名が、HTTPヘッダにHost: <hostname>
のように直接与えられます。
ちなみにMacを使ってる人はデフォルトのcurl
が古い場合があります。僕のは古かったです。curlはHomebrewでインストールできるんですが、自動でリンクを張ってくれないので、
$ brew install curl
$ brew link curl -f
みたいに明示的にリンクする必要があります。
確認用コード
// server.js
var http = require('http');
http.createServer(function(request, response) {
response.writeHead(200, {});
response.write('おちんちん');
response.end();
})
.listen('/tmp/sock');
$ node server.js
でunix:/tmp/sock
でリッスンするサーバーを起動し、別窓から
$ curl --unix-socket /tmp/sock localhost
とすれば「おちんちん
」とレスポンスが返ってきます。
ちなみにnodeのhttp
はsocketファイルのバキュームとかしてくれないので、終わったら
$ rm /tmp/sock
として消さないとプロセスが止まっても/tmp/sock
というファイルが残ります。