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.bodyだりself.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 に答える