3

したがって、私が実行しているプロセスは論理的に理にかなっているように見えますが、エラーが発生し続けます。サーバーに送信しようとしているこのバイナリ ファイルがあるので (正確には Shapeways です。バイナリ 3D モデル ファイルです)、このプロセスを実行して、URL で受け入れられるようにします。

theFile = open(fileloc,'rb')
contents = theFile.read()
b64 = base64.urlsafe_b64encode(contents)
url = urllib.urlencode(b64)  # error

問題は、最後の行が常にエラーをスローすることです

TypeError: not a valid non-string sequence or mapping object

データはURL用にエンコードされていると想定されているため、これは私には意味がありません。エンコードされていない他の文字などが含まれている可能性はありますか?

4

2 に答える 2

2

urllib.urlencode は、一連の 2 要素のタプルまたは辞書を URL クエリ文字列 (基本的には docstring からの抜粋) に取りますが、引数として単なる文字列を渡しています。

あなたはそのようなことを試すことができます:

theFile = open(fileloc,'rb')
contents = theFile.read()
b64 = base64.urlsafe_b64encode(contents)
url = urllib.urlencode({'shape': b64})

ただし、url 変数内で取得できるのはエンコードされたパラメータだけなので、実際の URL はまだ必要です。低レベルの操作が必要ない場合は、リクエストライブラリを使用することをお勧めします。

import requests
import base64

url = 'http://example.com'
r = requests.post(
    url=url,
    data={'shape':base64.urlsafe_b64encode(open(fileloc, 'rb').read())}
)
于 2013-09-06T20:45:09.700 に答える