如何从webapp2.Request获取数据

时间:2013-07-22 13:42:58

标签: python google-app-engine webapp2 google-mirror-api

我无法向后端发送一串字节(图像)。

在我的代码中,我有:

#  sends a httplib2.Request
backend_resp, backend_content = self.mirror_service._http.request(
                                uri=backend_path, 
                                body=urllib.urlencode({"img":content}))

这会发送一个请求,其中content是一个大字节字符串。

在我的后端我有:

class Handler(webapp2.RequestHandler):
  def get(self):
    image_bytes = self.request.get("img")
    logging.info(image_bytes) # output is empty string

记录空字符串。

我也试过

image_bytes = self.request.body

只需在请求中设置body = content,但这些也不会返回任何内容

我知道后端正在接收请求,因为后端日志包含我已放置的消息。

发送和检索我的GET数据的正确方法是什么?

修改

以下是content在尝试将其发送到后端之前的日志:

logging.info(str(type(content)))
# returns <type 'str'>

logging.info(content)
# logs a long string of bytes

另一方面,我在发送请求时也会在日志中收到此警告,但我不确定如何修复它:

new_request() takes at most 1 positional argument (2 given)

我猜这个警告意味着它所采用的1位置参数是path=,它忽略了我的body=参数。如果我添加(3 given)method="POST"

,我认为警告会更改为method="GET"

我也尝试使用POST方法,但logging.info不会显示在我的日志中。我尝试将self.request.bodyself.request.get('img')写回响应,它仍然只返回一个空字符串,就像GET方法一样。

1 个答案:

答案 0 :(得分:3)

从httplib2发送帖子:

import urllib
import httplib2

http = httplib2.Http()

url = '<your post url>'   
body = {'img': 'all your image bytes...'}
headers = {'Content-type': 'application/x-www-form-urlencoded'}
response, content = http.request(url, 'POST', headers=headers, body=urllib.urlencode(body))

see httplib2 docs

要收到Webapp2中的帖子:

class Handler(webapp2.RequestHandler):
  def post(self):
    image_bytes = self.request.POST.get("img")
    logging.info(image_bytes) # output is empty string

我没有测试过这段代码,但它应该会让你知道应该怎么做。