我无法向后端发送一串字节(图像)。
在我的代码中,我有:
# 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.body
或self.request.get('img')
写回响应,它仍然只返回一个空字符串,就像GET方法一样。
答案 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))
要收到Webapp2中的帖子:
class Handler(webapp2.RequestHandler):
def post(self):
image_bytes = self.request.POST.get("img")
logging.info(image_bytes) # output is empty string
我没有测试过这段代码,但它应该会让你知道应该怎么做。