编码URL的urllib.urlencode替代方案

0 投票
2 回答
1312 浏览
提问于 2025-04-17 08:48

我正在尝试向一个只接受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,而不是对整个内容进行编码。

撰写回答