2

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

在我的代码中,我有:

#  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 方法。

4

1 回答 1

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))

见 httplib2 文档

要在Webapp2中接收帖子:

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

我没有测试过这段代码,但它应该让你知道它应该如何完成。

于 2013-07-22T18:18:33.837 回答