【发布时间】:2013-07-22 13:42:57
【问题描述】:
我无法将一串字节(图像)发送到我的后端。
在我的代码中:
# 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)
我猜这个警告意味着它需要的第一个位置参数是path=,它忽略了我的body= 参数。如果我添加method="POST" 或method="GET",我认为警告会更改为(3 given)
我也尝试使用 POST 方法,但 logging.info 不会显示在我的日志中。我尝试将self.request.body 或self.request.get('img') 写回响应,但它仍然像GET 方法一样返回一个空字符串。
【问题讨论】:
-
用post而不是get来提交数据可能是个好主意。我不确定 mirror_service 是如何工作的..
-
我可能最终会使用 POST,但是当我将
logging.info调用放在 post 方法中时,它们不会出现在我的日志中 -
mirror_service 需要做一个 http post 而不是 http get 以便你看到 post 变量在 webapp2 的 post 处理程序中出现
-
尝试更改为 POST 方法,使用
self.request.body和self.request.get('img')访问数据并将其写入响应,但它只返回一个空字符串。我主要担心的是content永远不会到达 RequestHandler,或者我访问错了 -
顺便说一句,我添加了另一个警告,如果这可能暗示问题,我会回答主要问题
标签: python google-app-engine webapp2 google-mirror-api