Oh, I should mention one thing about using curl like that: it doesn't
support trailers. Right now the Java server just issues a warning in such
cases, but it should probably be failing. You can "fake" it by passing "-H
te:trailers" to curl, which will make the server happy but still doesn't
let you see the gRPC status.

Also, I had mentioned in chat that the problem may have been as simple as
using "helloworld.Greeter/SayHello" instead of
"/helloworld.Greeter/SayHello" (missing / at beginning). In gRPC we
commonly talk about service/method, without the leading slash. But in HTTP
it has the leading slash since it is a path.

On Tue, Jul 21, 2020 at 8:15 AM Eric Anderson <[email protected]> wrote:

> Here is the most basic gRPC call using curl:
>
> $ echo -ne '\000\000\000\000\000' | curl --http2-prior-knowledge
> http://localhost:50051/helloworld.Greeter/SayHello -H
> content-type:application/grpc --data-binary @- | od -t x1
> 0000000 00 00 00 00 08 0a 06 48 65 6c 6c 6f 20
> 0000015
>
> That sends an uncompressed zero-byte request (so the 'name' sent to the
> hello-world server would be empty string). The response is an uncompressed
> 8-byte response with the string "Hello ". You can pass '-v' to curl to see
> more information.
>
> On Tue, Jul 21, 2020 at 7:28 AM <[email protected]> wrote:
>
>> Hi,
>>
>> Since I am newish to gRPC, I would greatly appreciate your help and
>> advice.
>>
>> *Adding some context*
>>
>> I would like to consume a 3rd party gRPC server, in my case it is a
>> high-end router, actually there are many of those running different
>> versions of gRPC servers, but I'll use a simple example (details below) to
>> demonstrate my issue/question.
>>
>> In such a scenario, I am ok avoiding gRPC stubs and dealing only with
>> (de)serialising messages. Better to declare an endpoint and a body than
>> producing and using code for it.
>>
>> I would like to a HTTP/2 client to consume the gRPC response.
>>
>> *What the docs say about protobuf*
>>
>> Based on (just an example, every lang has a method to convert a Protobuf
>> encode message to JSON)
>> https://googleapis.dev/python/protobuf/latest/google/protobuf/json_format.html
>>
>> I would like to decode protobuf encoded messages to json
>>
>> *What the docs say about gRPC*
>>
>> Based on https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md
>>
>> it is doable to use a HTTP2 client if you specify the Content-Type (to be
>> application/grpc+proto) and a 5 byte header in each request:
>>
>> Length-Prefixed-Message (use 0x00 for Compressed-Flag)
>>
>> Message-Length
>>
>> *Running a gRPC server as an example*
>>
>> I tried to find a playground/public gRPC server, but no luck, so I am
>> using the introductory (hello world) example in the official page of gRPC
>> https://grpc.io/docs/languages/go/quickstart/
>>
>> $ go run greeter_server/main.go  # from one terminal
>>
>> *Running a gRPC client (grpcurl) as a method to verify*
>> $ wget https://
>> github.com/fullstorydev/grpcurl/releases/download/v1.6.1/grpcurl_1.6.1_linux_x86_64.tar.gz
>> $ cp grpcurl_1.6.1_linux_x86_64/grpcurl /usr/local/sbin/
>> $ cd grpc-go/examples/helloworld
>> $ grpcurl -import-path ./helloworld -proto helloworld.proto list
>> $ grpcurl -import-path ./helloworld -proto helloworld.proto describe
>> helloworld.Greeter
>> $ grpcurl -plaintext -import-path ./helloworld -proto helloworld.proto
>> 127.0.0.1:50051 helloworld.Greeter/SayHello
>> {
>>   "message": "Hello "
>> }
>>
>> *Making the gRPC calll (using a HTTP/2 client)*
>>
>>
>> iex(8)> len = 0
>>
>> iex(9)> body = IO.iodata_to_binary([<<0::unsigned-integer-size(8)-big>>,
>> <<len::unsigned-integer-size(32)-big>>])
>> <<0, 0, 0, 0, 0>>
>> iex(10)> {:ok, conn, request_ref} = Mint.HTTP2.request(conn, "POST",
>> "helloworld.Greeter/SayHello", _headers = [{"content-type",
>> "application/grpc+proto"}], body)
>>
>>
>> where <<0::unsigned-integer-size(8)-big>> is the *Compressed-Flag*,
>> <<len::unsigned-integer-size(32)-big>> is the *Message-Length*
>>
>> But I don't receive a valid HTTP response.
>>
>> *Question*
>>
>> Would you be so kind to point me to an example how-to achieve this?
>>
>> Are you able to use a HTTP/2 client to make a gRPC call?
>>
>> (without decoding the body for now)
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "grpc.io" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/grpc-io/983b704a-7867-49ac-95c1-bd8103721d0fo%40googlegroups.com
>> <https://groups.google.com/d/msgid/grpc-io/983b704a-7867-49ac-95c1-bd8103721d0fo%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"grpc.io" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/grpc-io/CA%2B4M1oMLrkXV7Dz%3Dw83LWosdmMeiFktKVed8j3sVT2Z_j6mQng%40mail.gmail.com.

Attachment: smime.p7s
Description: S/MIME Cryptographic Signature

Reply via email to