编码URL的urllib.urlencode替代方案
我正在尝试向一个只接受XML格式的API发送请求。我使用了elementtree.SimpleXMLWriter
来构建XML树,并把它存储在一个StringIO对象中。这一切都很好。
问题是,我必须对这个StringIO对象进行url编码,才能发送给API。但是当我尝试这样做时,我遇到了:
File "C:\Python27\lib\urllib.py", line 1279, in urlencode
if len(query) and not isinstance(query[0], tuple):
AttributeError: StringIO instance has no attribute '__len__'
显然,这个问题在Python的讨论中被提到过,具体可以查看这个链接。我只是想知道有没有其他内置的函数可以用来对字符串进行url编码,特别是那些不需要调用len()
的函数,这样我就可以对这个StringIO对象进行编码。
谢谢!
附注:如果有更简单的解决方案,我也愿意使用其他方法来存储XML对象,而不是StringIO。我只需要某种可以让SimpleXMLWriter
存储XML的“文件”。
2 个回答
2
你可以通过调用StringIO的getvalue()方法来获取一个字符串,然后把这个字符串传给urllib。
2
StringIO
实例就像一个文件,而不是一个字符串。它没有 len()
这个功能。你可以用 my_string_io_varaible.getvalue()
来获取它的字符串值,然后把这个值传给 urlencode()
,因为 urlencode()
需要的是字符串。
也许你可以在处理 XML 的过程中,对你嵌入的 URL 进行 urlencode
,而不是对整个内容进行编码。