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())
我有一个存储随机字符的变量,这些随机字符可能是来自解码 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())