2014-12-16 3 views
0

У меня есть эта строка XML-я хочу, чтобы POST к API URL, я уже cheking документацию и придумал что-то вроде этого:сообщение XML-данных с помощью аутентификации питона

import urllib.request as ur 
import urllib.parse as up 

auth_handler = ur.HTTPBasicAuthHandler() 
auth_handler.add_password(realm='something', 
         uri='http://api/api', 
         user=username, 
         passwd=passw) 

opener = ur.build_opener(auth_handler) 
opener.addheaders = [('User-agent', 'api-id'), ("Content-Type","applicaiton/xml;charset=utf-8")] 

data = up.urlencode(('<?xml version="1.0" encoding="UTF-8"?>' 
       "<entry>" 
         "<episode>"+ep_no+"</episode>" 
         "<status></status>" 
         "<score></score>" 
         "<tags></tags>" 
       "</entry>")) 

bin_data = data.encode('utf-8') 
opener.open("http://api/api/add/"+id+".xml", data=bin_data) 

Однако я» m получение:

... 
File "/home/hairo/sandbox/post_test.py", line 124, in post 
data = up.urlencode(('<?xml version="1.0" encoding="UTF-8"?>' 
... 
raise TypeError 
TypeError: not a valid non-string sequence or mapping object 

Похоже, что у меня что-то не хватает, но я не могу понять, что это такое, любая помощь?

+0

Какая строка связана с ошибкой? – Wyrmwood

+0

Добавлена ​​строка ошибок. – Hairo

+0

«Преобразовать объект сопоставления или последовательность двухэлементных кортежей». Ваш аргумент является одноэлементным кортежем. – Wyrmwood

ответ

1

Этот звонок urlencode передает только одноэлементный кортеж. Here - пример того, с каким типом аргументов работает urlencode.

«Преобразование объекта сопоставления или последовательности двухэлементных кортежей».

+1

Спасибо, я решил это с помощью 'up.urlencode ({'data': ('' ...)})' – Hairo

Смежные вопросы