VOOZH about

URL: https://www.nuget.org/packages/grpc-curl/

⇱ NuGet Gallery | grpc-curl 1.4.0




👁 Image
grpc-curl 1.4.0

dotnet tool install --global grpc-curl --version 1.4.0
 
 
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest
 
if you are setting up this repo
dotnet tool install --local grpc-curl --version 1.4.0
 
 
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=grpc-curl&version=1.4.0
 
 
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
nuke :add-package grpc-curl --version 1.4.0
 
 
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

grpc-curl 👁 Build Status
👁 Coverage Status
👁 NuGet

<img align="right" width="160px" height="160px" src="https://raw.githubusercontent.com/xoofx/grpc-curl/main/img/grpc-curl.png">

grpc-curl is a command line tool for interacting with gRPC servers.

All the functionalities of grpc-curl are also accessible through the NuGet package DynamicGrpc that is part of this repository.

This tool is the .NET equivalent of the popular gRPCurl written in Golang.

NOTE: grpc-curl doesn't not support yet all the features that gRPCurl is providing.

Features

  • Allows to invoke method services for all gRPC calling modes (unary, client streaming, server streaming, full-duplex).
  • Allows to print proto reflection descriptors back to proto language (via --describe with grpc-curl, or via the API .ToProtoString() with DynamicGrpc)
  • Supports for plain Protocol Buffers naming conventions and JSON.
  • Supports for google.protobuf.Any: The type has to be encoded - and is decoded with the shadow property @type on a dictionary (e.g @type = "type.googleapis.com/YourTypeName").
  • Build on top of the DynamicGrpc library available as a separate NuGet package.
  • Build for net6.0+
  • Available for multiple platforms. See binaries section below.

Usage

grpc-curl currently requires that the gRPC server has activated gRPC reflection.

Copyright (C) 2022 Alexandre Mutel. All Rights Reserved
grpc-curl - Version: 1.3.6

Usage: grpc-curl [options] address service/method

 address: A http/https URL or a simple host:address.
 If only host:address is used, HTTPS is used by default
 unless the options --http is passed.

## Options

 -d, --data=VALUE Data for string content.
 --http Use HTTP instead of HTTPS unless the protocol is
 specified directly on the address.
 --json Use JSON naming for input and output.
 --describe Describe the service or dump all services
 available.
 -v, --verbosity[=VALUE] Set verbosity.
 -h, --help Show this help.

Query a service

./grpc-curl --json -d "{""getStatus"":{}}" http://192.168.100.1:9200 SpaceX.API.Device.Device/Handle

Will print the following result:

{
 "apiVersion": 4,
 "dishGetStatus": {
 "deviceInfo": {
 "id": "0000000000-00000000-00000000",
 "hardwareVersion": "rev2_proto3",
 "softwareVersion": "992cafb5-61c7-46a3-9ef7-5907c8cf90fd.uterm.release",
 "countryCode": "FR",
 "utcOffsetS": 1
 },
 "deviceState": {
 "uptimeS": 667397
 },
 "obstructionStats": {
 "fractionObstructed": 2.2786187E-06,
 "wedgeFractionObstructed": [
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0
 ],
 "wedgeAbsFractionObstructed": [
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0,
 0.0
 ],
 "validS": 667070.0,
 "avgProlongedObstructionIntervalS": "NaN"
 },
 "alerts": {
 "roaming": true
 },
 "downlinkThroughputBps": 461012.72,
 "uplinkThroughputBps": 294406.6,
 "popPingLatencyMs": 30.35,
 "boresightAzimuthDeg": 0.7464048,
 "boresightElevationDeg": 65.841354,
 "gpsStats": {
 "gpsValid": true,
 "gpsSats": 12
 }
 }
}

Describe a service

./grpc-curl --describe http://192.168.100.1:9200 SpaceX.API.Device.Device

Will print:

// SpaceX.API.Device.Device is a service:
service Device {
 rpc Stream ( .SpaceX.API.Device.ToDevice ) returns ( .SpaceX.API.Device.FromDevice );
 rpc Handle ( .SpaceX.API.Device.Request ) returns ( .SpaceX.API.Device.Response );
}

Describe all proto files serviced via reflection

./grpc-curl --describe http://192.168.100.1:9200

Will print:

// spacex/api/common/status/status.proto is a proto file.
syntax = "proto3";

package SpaceX.API.Status;

// SpaceX.API.Status.Status is a message:
message Status {
 int32 code = 1;
 string message = 2;
}


// spacex/api/device/command.proto is a proto file.
syntax = "proto3";

package SpaceX.API.Device;

// SpaceX.API.Device.PublicKey is a message:
message PublicKey {
 string key = 1;
 repeated Capability capabilities = 2;
}

// ....... and more prints ........

Usage API

All the functionalities of grpc-curl are also accessible through the NuGet package DynamicGrpc.

var channel = GrpcChannel.ForAddress("http://192.168.100.1:9200");
// Fetch reflection data from server
var client = await DynamicGrpcClient.FromServerReflection(channel);

// Call the method `Handle` on the service `SpaceX.API.Device.Device`
var result = await client.AsyncUnaryCall("SpaceX.API.Device.Device", "Handle", new Dictionary<string, object>()
{
 { "get_status", new Dictionary<string, object>() }
});

// Print a proto descriptor
FileDescriptor descriptor = client.Files[0];
Console.WriteLine(descriptor.ToProtoString());

Binaries

grpc-curl is available on multiple platforms:

Platform Packages
win-x64, win-arm, win-arm64 zip
linux-x64, linux-arm, linux-arm64 deb, tar
rhel-x64 rpm, tar
osx-x64, osx-arm64 tar

If you have dotnet 6.0 installed, you can install this tool via NuGet:

dotnet tool install --global grpc-curl

Otherwise, you can install native binaries to Windows, Linux, and macOS with the various debian/rpm/zip packages available directly from the releases.

grpc-curl is also available via homebrew for macOS and Linux:

$ brew tap xoofx/grpc-curl
$ brew install grpc-curl

License

This software is released under the BSD-Clause 2 license.

Author

Alexandre Mutel aka xoofx.

Product Versions Compatible and additional computed target framework versions.
.NET net6.0 net6.0 is compatible.  net6.0-android net6.0-android was computed.  net6.0-ios net6.0-ios was computed.  net6.0-maccatalyst net6.0-maccatalyst was computed.  net6.0-macos net6.0-macos was computed.  net6.0-tvos net6.0-tvos was computed.  net6.0-windows net6.0-windows was computed.  net7.0 net7.0 was computed.  net7.0-android net7.0-android was computed.  net7.0-ios net7.0-ios was computed.  net7.0-maccatalyst net7.0-maccatalyst was computed.  net7.0-macos net7.0-macos was computed.  net7.0-tvos net7.0-tvos was computed.  net7.0-windows net7.0-windows was computed.  net8.0 net8.0 was computed.  net8.0-android net8.0-android was computed.  net8.0-browser net8.0-browser was computed.  net8.0-ios net8.0-ios was computed.  net8.0-maccatalyst net8.0-maccatalyst was computed.  net8.0-macos net8.0-macos was computed.  net8.0-tvos net8.0-tvos was computed.  net8.0-windows net8.0-windows was computed.  net9.0 net9.0 was computed.  net9.0-android net9.0-android was computed.  net9.0-browser net9.0-browser was computed.  net9.0-ios net9.0-ios was computed.  net9.0-maccatalyst net9.0-maccatalyst was computed.  net9.0-macos net9.0-macos was computed.  net9.0-tvos net9.0-tvos was computed.  net9.0-windows net9.0-windows was computed.  net10.0 net10.0 was computed.  net10.0-android net10.0-android was computed.  net10.0-browser net10.0-browser was computed.  net10.0-ios net10.0-ios was computed.  net10.0-maccatalyst net10.0-maccatalyst was computed.  net10.0-macos net10.0-macos was computed.  net10.0-tvos net10.0-tvos was computed.  net10.0-windows net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last Updated
1.4.0 1,050 11/13/2022
1.3.7 656 6/15/2022
1.3.6 644 3/7/2022
1.3.5 649 2/1/2022
1.3.4 632 1/30/2022
1.3.3 628 1/30/2022
1.3.2 643 1/29/2022
1.3.1 613 1/27/2022
1.3.0 703 1/22/2022
1.2.0 719 1/21/2022
1.1.0 753 1/21/2022
1.0.0 763 1/20/2022