urllib.urlencode的替代方案,用于编码URL

时间:2011-12-21 20:09:49

标签: python urlencode stringio

我正在尝试向只接受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。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

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

也许你可以urlencode在整个过程中嵌入XML的网址,而不是整个网页。