我有一个存储随机字符的变量,它可能是来自解码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打开页面的错误方法?
答案 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())