我正在尝试向只接受XML的API发送请求。我使用elementtree.SimpleXMLWriter
来构建XML树,它存储在StringIO对象中。这一切都很好,花花公子。
问题是我必须对StringIO对象进行urlencode以便将其发送到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__'
显然这被讨论为an issue with Python。我只是想知道是否有任何其他内置函数用于urlencoding一个字符串,特别是那些不需要调用len()
的函数,以便我可以编码这个StringIO对象。
谢谢!
PS:我愿意使用StringIO以外的东西存储XML对象,如果这是一个更简单的解决方案。我只需要某种“file”来SimpleXMLWriter
来存储XML。
答案 0 :(得分:2)
您可以通过调用其getvalue()方法从StringIO中获取字符串,并将其传递给urllib。
答案 1 :(得分:2)
StringIO
实例就像一个文件,而不是一个字符串。它没有len()
。使用my_string_io_varaible.getvalue()
获取字符串值,并将其传递给需要字符串的urlencode()
。
也许你可以urlencode
在整个过程中嵌入XML的网址,而不是整个网页。