2011-12-21 56 views
0

我试图向只接受XML的API发送请求。我使用elementtree.SimpleXMLWriter来构建XML树并将其存储在一个StringIO对象中。这一切都很好,很棒。用于编码URL的urllib.urlencode的替代

问题是我必须urlencode StringIO对象才能将其发送到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”来存储XML。

回答

2

StringIO实例就像一个文件,不像一个字符串。它没有len()。使用my_string_io_varaible.getvalue()获取字符串值,并将其传递给urlencode(),该字符串需要一个字符串。

也许你可以urlencode你一路嵌入到XML中的URL,而不是整个事物。

2

您可以通过调用其getvalue()方法从StringIO中获取一个字符串,并将其传递给urllib。