Получение необработанных данных HTTP (заголовки, файлы cookie и т. д.) в конечных точках Google Cloud

Мне интересно, можно ли собирать необработанные данные HTTP в облачной конечной точке. Кажется, я ничего не могу найти в документации Google, но Twitter App Engine сказал мне, что это было (https://twitter.com/app_engine/status/305747445017624576). Если да, могу ли я получить синтаксис для этого? Я знаю, что API для GCE все еще находится на ранней стадии, и любая помощь будет принята с благодарностью.


person nicksahler    schedule 24.02.2013    source источник


Ответы (2)


Добавьте параметр 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();
    ...
}
person Tom    schedule 24.02.2013
comment
Ух ты! Это удивительно просто. Отпишусь с результатами, спасибо! - person nicksahler; 25.02.2013
comment
Да, я немного споткнулся, пытаясь понять это (я не могу вспомнить, где я нашел решение), но был доволен тем, насколько простым это было, когда я нашел его. - person Tom; 25.02.2013
comment
Вероятно отсюда: developers.google.com/appengine/docs/java/ конечные точки/ - person Ivan; 03.11.2013
comment
Это также возможно с версией Python? - person Korneel; 18.12.2013
comment
Это абсолютно правильный ответ! Но где это можно найти в документе GAE? - person Yoraco Gonzales; 25.05.2015
comment
Как мне это сделать для HttpServletResponse? (Я хочу передавать видео в формате mp4 через конечную точку), поэтому мне нужно, чтобы HttpServletResponse передал API Blobstore. - person Katedral Pillon; 14.10.2015

Запрос доступен в методе конечных точек как внедренный тип. Объект типа HttpServletRequest невидимо внедряется в ваше определение метода Java, когда вы объявляете параметр метода, который имеет этот тип, например:

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

Цитата из приведенной выше документации:

Введенные типы

Внедренные типы — это типы, которые обрабатываются Cloud Endpoints Frameworks особым образом. Если такой тип используется в качестве параметра метода, он не становится частью API. Вместо этого параметр заполняется Endpoints Frameworks.

Вводимые типы следующие:

com.google.appengine.api.users.Пользователь

javax.servlet.http.HttpServletRequest

javax.servlet.ServletContext

person Chris Halcrow    schedule 17.06.2019