Python 3 urllib.request 字节指示符 b' 导致问题

Python 3 urllib.request byte indicator b' causing issues

我有一个存储随机字符的变量,这些随机字符可能是来自解码 base64 的特殊字符:

variable = qb'l*,707$}p*yk

然后我将其附加到 URL 的末尾,我已经知道如何导航特定页面
www.website.com/1/2/3/index.php?addafterthis=

所以我尝试这样打开:

opener = urllib.request.build_opener()
opener.open('www.website.com/1/2/3/index.php?addafterthis=',str.encode(string))  

我相信str.encode 添加 b' 来表示字节
你最终得到
addafterthis= b'qb'l*,707$}pyk
而不是正确的
addafterthis=qb'l
,707$}p*yk

但是我无法删除 str.encode 选项,否则会出现错误
类型错误:'str' 对象不可调用

编码错误/编码方式错误,urllib打开页面方式错误?

使用str.encode肯定是错误的。您传递的对象是 bytes 实例,而不是 str 实例,因此 str 类型的 encode 方法将引发异常。

我怀疑你想使用 urllib.parse.urlencode。这采用二元组的映射或序列,并生成适合在 HTTP 请求中使用的查询字符串。试试这个:

query_string = urllib.parse.urlencode({'addafterthis':string})
opener.open('www.website.com/1/2/3/index.php?{}'.format(query_string))

请注意,这是一个 HTTP GET 请求,因为查询字符串是直接内置到 URL 中的。如果您想改为执行 POST 请求,则需要调用 open 并将数据作为单独的参数(并且需要将其编码为 bytes):

opener.open('www.website.com/1/2/3/index.php', query_string.encode())