Closed3

grpcサーバに対してcurlでリクエストを送信するための対応ログ

tamaco489tamaco489

そもそもパスがないところから開始。
実行環境は Windows11、WSL上にUbuntuを入れて動かしている。Goはasdf利用してインストールしている。バージョンは1.24.2を使用。

$ which grpcurl                   
grpcurl not found

go経由でinstallする

go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest

~/.zshrc 使ってるのでそっちにパス通す設定追加

export PATH=$PATH:/home/hoge/.asdf/installs/golang/$(go version | awk '{print $3}' | sed 's/^go//')/bin

コマンドが認識される

$ which grpcurl     
/home/hoge/.asdf/installs/golang/1.24.2/bin/grpcurl
tamaco489tamaco489

早速gprcurlでリクエストするもエラーになる。

$ grpcurl -plaintext localhost:50051 healthcheck.HealthCheckService/GetHeartbeat
Error invoking method "healthcheck.HealthCheckService/GetHeartbeat": failed to query for service descriptor "healthcheck.HealthCheckService": server does not support the reflection API

server does not support the reflection API

https://github.com/XTLS/Xray-core/issues/2772

gRPC サーバーがクライアントからのサービス定義の問い合わせ(リフレクションAPI)をサポートしていない故のエラー。
サーバ側に grpcreflect を仕込めば動くようだが、さっと確認したい故このまま無理やり疎通確認することも可能な模様。
-proto オプションで、proto定義ファイルのパスを指定した状態でgrpcurlでリクエストすると確認できる。

$ ls -l ./proto/healthcheck/healthcheck.proto            
-rw-r--r-- 1 hoge hoge 342 Jun 10 22:30 ./proto/healthcheck/healthcheck.proto
$ grpcurl -plaintext -proto ./proto/healthcheck/healthcheck.proto localhost:50051 healthcheck.HealthCheckService/GetHeartbeat
{
  "serverTime": "1749571907"
}
このスクラップは3ヶ月前にクローズされました