Python 来自镜像API的Google Glass callbackUrl帖子为空?
抱歉,因为我所知道的唯一一个web开发是django/python类型的,我可能对混合了我的代码习惯用法(REST与django URL调度工作流)感到内疚 我有一个URL处理程序,它可以作为订阅我的玻璃器皿的回调URL。我正在向处理程序发送帖子,但请求对象似乎是空的 我肯定我理解错了,但是有人能告诉我从POST通知到callbackURL获取“回复”信息的方向吗 我的URL处理程序是Python 来自镜像API的Google Glass callbackUrl帖子为空?,python,google-mirror-api,google-glass,callbackurl,Python,Google Mirror Api,Google Glass,Callbackurl,抱歉,因为我所知道的唯一一个web开发是django/python类型的,我可能对混合了我的代码习惯用法(REST与django URL调度工作流)感到内疚 我有一个URL处理程序,它可以作为订阅我的玻璃器皿的回调URL。我正在向处理程序发送帖子,但请求对象似乎是空的 我肯定我理解错了,但是有人能告诉我从POST通知到callbackURL获取“回复”信息的方向吗 我的URL处理程序是 A600Handler类(webapp2.RequestHandler): 我已经定义了以下URL处理程序
A600Handler类(webapp2.RequestHandler):
我已经定义了以下URL处理程序,并且可以通过查看应用程序引擎日志来验证当用户点击reply时post函数是否得到“ping”
主要路线=[
('/',主处理器),('/logA600',A600Handler),
]
如何以用户发送的语音转录文本的形式提取有效负载?。我不明白你试过了吗?国家
如果需要访问请求中发布的原始或非表单数据,请改为通过HttpRequest.body属性访问
如果API在其帖子中没有使用表单数据,您可能会在request.body
中找到内容。指示内容将作为JSON而不是表单数据放置在正文中(“包含JSON
request正文”)。我会尝试json.loads(request.body)
你试过了吗?国家
如果需要访问请求中发布的原始或非表单数据,请改为通过HttpRequest.body属性访问
如果API在其帖子中没有使用表单数据,您可能会在
request.body
中找到内容。指示内容将作为JSON而不是表单数据放置在正文中(“包含JSON
request正文”)。我会尝试json.loads(request.body)
我也遇到了镜像API调用我的应用程序进行通知的问题,而这些通知是空的。我的应用程序在tomcat上运行,因此它是一个java堆栈。所有样本处理通知的方式如下:
BufferedReader notificationReader = new BufferedReader(
new InputStreamReader(request.getInputStream()));
String notificationString = "";
// Count the lines as a very basic way to prevent Denial of Service
// attacks
int lines = 0;
while (notificationReader.ready()) {
notificationString += notificationReader.readLine();
lines++;
// No notification would ever be this long. Something is very wrong.
if (lines > 1000) {
throw new IOException(
"Attempted to parse notification payload that was unexpectedly long.");
}
}
log.info("got raw notification " + notificationString);
对我来说,这总是记录为空。由于通知url必须是https,并且为了进行测试,我不能使用IP地址,所以我设置了dyndns服务以指向我的localhost:8080运行的服务。这一切似乎都是可行的,但我怀疑dyndns的工作原理是某种类型的转发或重定向,这里的post数据被删除了
我如何解决这一问题以促进当地发展
已更新:
为我解决。
我发现在读取请求之前关闭响应会导致request.inputStream已关闭的问题。移动这个
response.setContentType("text/html");
Writer writer = response.getWriter();
writer.append("OK");
writer.close();
在我将请求通知完全读入字符串后,解决了这个问题。我还遇到了镜像API调用我的应用程序以获取通知的问题,而这些通知是空的。我的应用程序在tomcat上运行,因此它是一个java堆栈。所有样本处理通知的方式如下:
BufferedReader notificationReader = new BufferedReader(
new InputStreamReader(request.getInputStream()));
String notificationString = "";
// Count the lines as a very basic way to prevent Denial of Service
// attacks
int lines = 0;
while (notificationReader.ready()) {
notificationString += notificationReader.readLine();
lines++;
// No notification would ever be this long. Something is very wrong.
if (lines > 1000) {
throw new IOException(
"Attempted to parse notification payload that was unexpectedly long.");
}
}
log.info("got raw notification " + notificationString);
对我来说,这总是记录为空。由于通知url必须是https,并且为了进行测试,我不能使用IP地址,所以我设置了dyndns服务以指向我的localhost:8080运行的服务。这一切似乎都是可行的,但我怀疑dyndns的工作原理是某种类型的转发或重定向,这里的post数据被删除了
我如何解决这一问题以促进当地发展
已更新:
为我解决。
我发现在读取请求之前关闭响应会导致request.inputStream已关闭的问题。移动这个
response.setContentType("text/html");
Writer writer = response.getWriter();
writer.append("OK");
writer.close();
在我将请求通知完全读入字符串后,解决了这个问题。感谢gotgenes,evrything确实隐藏在请求正文中。正如你从django处理它的方式中指出的那样。request.POST.get(“key”)仅适用于基于表单的帖子信息。镜像API返回都在我上面的处理程序类中的self.request.body中。感谢gotgenes,evrything确实隐藏在请求体中。正如你从django处理它的方式中指出的那样。request.POST.get(“key”)仅适用于基于表单的帖子信息。镜像API返回的都在我上面的处理程序类的self.request.body中。注意,如果我使用Google的代理重定向服务,并将ip地址硬编码,我也会被调用,但请求仍然为空。请注意,如果我使用谷歌的代理重定向服务,并将我的ip地址硬编码,我也会被调用,但请求仍然为空。