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

时间:2015-01-30 20:26:12

标签: python-3.x urllib

我有一个存储随机字符的变量,它可能是来自解码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 $} p yk
而不是正确的 addafterthis = qb' l
,707 $} p * yk

但是我无法移除str.encode选项或者我收到错误
TypeError:' str'对象不可调用

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

1 个答案:

答案 0 :(得分:2)

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

我怀疑你想使用urllib.parse.urlencode。这将采用2元组的映射或序列,并生成适合在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())