[英]Getting raw HTTP Data (Headers, Cookies, etc) in Google Cloud Endpoints
[英]Cloud Endpoints HTTP Cookies
我正在使用Python应用程序实施Cloud Endpoints,该应用程序使用自定义身份验证( GAE Sessions )而不是Google帐户。 我需要验证来自Javascript客户端的请求,因此我希望能够访问cookie信息。
阅读这个其他问题让我相信这是可能的,但也许没有记录。 我不熟悉App Engine的Java端,所以我不太确定如何将该片段翻译成Python。 这是我的一个方法的示例:
class EndpointsAPI(remote.Service):
@endpoints.method(Query_In, Donations_Out, path='get/donations',
http_method='GET', name='get.donations')
def get_donations(self, req):
#Authenticate request via cookie
其中Query_In
和Donations_Out
都是ProtoRPC消息( messages.Message
)。 函数中的参数req
只是Query_In
一个实例,我没有找到任何与HTTP数据相关的属性,但是我可能错了。
首先,我建议您尝试使用来自客户端的OAuth 2.0,就像在Tic Tac Toe 示例中所做的那样。
Cookie会在Cookie标头中发送到服务器,这些值通常在WSGI环境中使用密钥'HTTP_...'
,其中...
对应于标头名称:
http = {key: value for key, value in os.environ.iteritems()
if key.lower().startswith('http')}
对于cookie, os.getenv('HTTP_COOKIE')
将为您提供所寻找的标题值。 不幸的是,默认情况下,这不会通过Google的API基础结构传递。
更新 :自1.8.0版本起,已为Python应用程序启用此功能。 要通过cookie发送,请指定以下内容:
from google.appengine.ext.endpoints import api_config
AUTH_CONFIG = api_config.ApiAuth(allow_cookie_auth=True)
@endpoints.api(name='myapi', version='v1', auth=AUTH_CONFIG, ...)
class MyApi(remote.service):
...
这是一个(不一定是全面的列表)标题,通过它:
HTTP_AUTHORIZATION
HTTP_REFERER
HTTP_X_APPENGINE_COUNTRY
HTTP_X_APPENGINE_CITYLATLONG
HTTP_ORIGIN
HTTP_ACCEPT_CHARSET
HTTP_ORIGINALMETHOD
HTTP_X_APPENGINE_REGION
HTTP_X_ORIGIN
HTTP_X_REFERER
HTTP_X_JAVASCRIPT_USER_AGENT
HTTP_METHOD
HTTP_HOST
HTTP_CONTENT_TYPE
HTTP_CONTENT_LENGTH
HTTP_X_APPENGINE_PEER
HTTP_ACCEPT
HTTP_USER_AGENT
HTTP_X_APPENGINE_CITY
HTTP_X_CLIENTDETAILS
HTTP_ACCEPT_LANGUAGE
对于在这里降落的Java人。 您需要添加以下注释才能在端点中使用Cookie:
@Api(auth = @ApiAuth(allowCookieAuth = AnnotationBoolean.TRUE))
(没有它,它将在本地开发服务器上工作,但不在真正的GAE实例上工作。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.