【发布时间】:2021-07-19 12:03:42
【问题描述】:
我正在尝试使用 kotlin 学习 grpc 并使用以下 proto 定义制作一个简单的 grpc 服务:
syntax = "proto3";
option java_multiple_files = true;
option java_package = "br.bortoti";
option java_outer_classname = "StockProto";
option objc_class_prefix = "HLW";
package br.bortoti;
import "google/api/annotations.proto";
service StockService {
rpc GetStock (GetStockRequest) returns (Stock) {
option(google.api.http) = {
get: "V1/stocks/{stock}"
body: "*"
};
}
}
message Stock {
string ticker = 1;
}
message GetStockRequest {
string ticker = 1;
}
message GetStockReply {
string ticker = 1;
}
所以,我基本上是将服务映射到获取请求。
但是当我尝试从 curl 中调用这个 url 时:
curl http://localhost:8088/V1/stocks/1
我得到错误: curl:(1)在不允许时收到 HTTP/0.9
从服务器端我有:
INFO: Transport failed
io.netty.handler.codec.http2.Http2Exception: Unexpected HTTP/1.x request: GET /V1/stocks/1
如何让服务器接受 http 1.1 调用?有可能吗?
【问题讨论】:
-
gRPC 基于 HTTP/2 并且有自己的protocol specification。因此 gRPC 服务器不会接受普通的
curl调用。 gRPC 有很多类似于curl的命令行工具,其中一些广泛使用的是grpc_cli 和bloomrpc。 -
你可能想看看这个grpcurl