我正在构建一个Java的grpc服务器,我很难得到请求头。proto文件是使用Pro buf-maven-plugin编译的,基于生成的存根,我无法访问上下文或请求元数据。
我还尝试在消息请求中定义一个键/值列表,希望grpc能够处理头映射,但目前为止没有成功。
知道我怎么能拿到标题吗?
谢谢
我的原型文件内容:
...
// Version Request
message VersionRequest {
// key/value pairs
repeated Header headers = 1;
}
message Header {
//key
string key = 1;
//value
string constant = 2;
}
...
...
security_definitions: {
security: {
key: "clientIdAuth";
value: {
type: TYPE_API_KEY;
in: IN_HEADER;
name: "x-client-id";
}
}
security: {
key: "clientSecretAuth";
value: {
type: TYPE_API_KEY;
in: IN_HEADER;
name: "x-client-secret";
}
}
security: {
key: "bearerAuth";
value: {
type: TYPE_API_KEY;
in: IN_HEADER;
name: "Authorization";
}
}
}
...
// Retrieves system version
//
// Retrieves system version
rpc GetVersion(VersionRequest) returns (Version) {
option (google.api.http) = {
get : "/api/v4/version"
};
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation) = {
security: {
security_requirement: {
key: "clientIdAuth";
value: {}
}
security_requirement: {
key: "clientSecretAuth";
value: {}
}
security_requirement: {
key: "bearerAuth";
value: {}
}
}
};
}
...
服务器端实现如下所示:
...
@GrpcService
public class GrpcAPIService extends MixAPIGrpc.MixAPIImplBase {
@Autowired
private MwProxy mwProxy;
@Override
public void getVersion(VersionRequest versionRequest, StreamObserver<Version> streamObserver) {
System.out.println("===============" + versionRequest.getHeadersCount());
handleEGrpcCall("getVersion", mwProxy::getVersion, streamObserver);
}
...
版本请求。getHeadersCount()始终返回0,尽管在所有我的请求中都发送了3个标头。
标头,我想是您正在谈论的HTTP标头,属于HTTP协议。这就是为什么您未能在gRPC层中获取它。如果您使用MVC框架,请确保在Servlet或Controller中检索它(添加HttpServletRequest
参数如下)。
@GetMapping("hello")
public CompletableFuture<GreetingResponse> greet(HttpServletRequest request, @RequestParams someParam) {
// call gRPC Service here
}
然后您可以通过request.getHeader("User-Agent")
访问标头。
除非您使用的是第三方提供的自定义grpc java codegen插件,否则grpc java库附带的标准grpc codegen插件https://search.maven.org/search?q=a:protoc-gen grpc java g:io。grpc不支持自定义方法选项,例如
option (grpc.gateway.protoc_gen_swagger.options.openapiv2_operation)
所以你不能利用这些选项。grpc-java可以做的是通过客户端和服务器拦截器发送和接收io.grpc.元数据
。参见示例:https://github.com/grpc/grpc-java/tree/v1.33.1/examples/src/main/java/io/grpc/examples/header
问题内容: 我需要获取所有Django请求标头。根据我的阅读,Django只是将所有内容与大量其他数据一起转储到变量中。获取客户端发送到我的Django应用程序的所有标头的最佳方法是什么? 我将使用它们来构建httplib请求。 问题答案: 根据文档,这 是“包含所有可用HTTP标头的标准Python词典”。如果要获取所有标头,则可以简单地遍历字典。 代码的哪一部分执行此操作取决于你的确切要求。有
我尝试做的是从同一个站点发布数据并从它创建一个新的订单(当提交按钮被点击时)。我没有任何信息在我的请求。身体,我怀疑是在我的ejs出了问题,任何反馈是非常感谢的。 我的ejs文件: 和我的js文件:
问题内容: 我正在使用python中的请求库发出HTTP请求,但我需要来自响应http请求的服务器的IP地址,因此,我试图避免进行两次调用(可能与响应的IP地址不同)请求。 那可能吗?是否有任何python http库允许我这样做? ps:我还需要发出HTTPS请求并使用经过身份验证的代理。 更新1: 例: 然后,我想知道响应中的方法或属性将哪些IP地址请求连接到了。在其他库中,我可以通过找到袜子
我如何解析JSON请求之类的东西? 示例代码: 带有_名称的位置_为无
我用的是Spring靴。我已经为SOAP web服务编写了一个ClientInterceptor,我想记录我要向其发送请求的URL,并且我想在HandlerResponse方法中这样做。然而,我找不到一个方法来做到这一点。有可能吗?任何帮助都会很好。 创建restTemplate的方式