编程语言
首页 > 编程语言> > URL在python中编码二进制文件时出现问题

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