Альтернатива urllib.urlencode для кодирования URL - PullRequest
0 голосов
/ 22 декабря 2011

Я пытаюсь отправить запрос в API, который принимает только XML. Я использовал elementtree.SimpleXMLWriter для построения дерева XML, и оно хранится в объекте StringIO. Это все хорошо и денди.

Проблема в том, что мне нужно 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__'

Очевидно, это обсуждалось как проблема с Python . Мне просто интересно, есть ли какие-либо другие встроенные функции для urlencoding строки, особенно те, которым не нужно вызывать len(), чтобы я мог кодировать этот объект StringIO.

Спасибо!

PS: Я открыт для использования чего-то другого, кроме StringIO, для хранения объекта XML, если это более простое решение. Мне просто нужен какой-то " file " для SimpleXMLWriter для хранения XML.

Ответы [ 2 ]

2 голосов
/ 22 декабря 2011

StringIO экземпляр похож на файл, а не на строку.У него нет len().Используйте my_string_io_varaible.getvalue(), чтобы получить строковое значение, и передайте его urlencode(), который ожидает строку.

Может быть, вы могли бы urlencode URL-адреса, которые вы встраиваете в XML по пути, вместо всего этого.

2 голосов
/ 22 декабря 2011

Вы можете получить строку из вашего StringIO, вызвав его метод getvalue (), и передать его urllib.

...