URL在python中编码二进制文件时出现问题
作者:互联网
因此,我正在执行的过程对我来说似乎很合逻辑,但我一直遇到错误.因此,我有一个要发送到服务器的二进制文件(准确地说,是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进行编码的.是否有可能仅包含其他未编码或类似字符的字符?
解决方法:
urllib.urlencode将一个由两个元素组成的元组或字典的序列放入URL查询字符串中(基本上是从docstring中摘录的),但是您只是将一个字符串作为参数传递.
您可以尝试类似的方法:
theFile = open(fileloc,'rb')
contents = theFile.read()
b64 = base64.urlsafe_b64encode(contents)
url = urllib.urlencode({'shape': b64})
但是您在url变量中获得的所有内容都是经过编码的参数,因此您仍然需要实际的url.如果您不需要低级操作,最好使用requests库:
import requests
import base64
url = 'http://example.com'
r = requests.post(
url=url,
data={'shape':base64.urlsafe_b64encode(open(fileloc, 'rb').read())}
)
标签:base64,urllib,binaryfiles,python 来源: https://codeday.me/bug/20191122/2062601.html