在 Google Cloud Endpoints 中获取原始 HTTP 数据(标头、Cookie 等)

我想知道是否有可能在云终端节点中收集原始HTTP数据。我似乎在谷歌的文档中找不到任何东西,但App Engine的Twitter告诉我它是(https://twitter.com/app_engine/status/305747445017624576)。如果是这样,我能为它提供语法吗?我知道GCE的API仍处于早期阶段,任何帮助将不胜感激。


答案 1

将 HttpServletRequest 参数添加到您的端点方法中,例如

@ApiMethod
public MyResponse getResponse( HttpServletRequest req, @Named("infoId") String infoId ) {
    // Use 'req' as you would in a servlet, e.g.
    String ipAddress = req.getRemoteAddr();
    ...
}

答案 2

该请求在终结点方法中作为注入类型提供。当您在具有 Java 方法类型的方法上声明参数时,类型的对象将以不可见的方式注入到 Java 方法定义中,如下所示:HttpServletRequest

import javax.servlet.http.HttpServletRequest;
...

@ApiMethod
public MyMethod getRequest( HttpServletRequest req ) {

HttpServletRequest myRequest = req;
...
}

这记录在这里:

https://cloud.google.com/endpoints/docs/frameworks/java/parameter-and-return-types#injected_types

引用上述文档:

注入类型

注入的类型是那些接受云终结点框架特殊处理的类型。如果将此类类型用作方法参数,则不会使其成为 API 的一部分。相反,该参数由终结点框架填充。

注入的类型如下:

com.google.appengine.api.users.User

javax.servlet.http.HttpServletRequest

javax.servlet.ServletContext


推荐