Как я могу отправить тело xml с помощью библиотеки запросов?
def request():
#encoded_xml = urllib.urlencode({'XML': read_xml()})
#encoded_xml = read_xml()
headers = {'Authorization': AUTH_TOKEN,\
'developerToken': DEVELOPER_TOKEN,\
'clientCostumerID': CLIENT_ID}
content = {'__rdxml': encoded_xml}
#content = encoded_xml
#content = {'__rdxml': read_xml2()}
r = requests.post(URL, data=content,\
headers=headers)
return r
Эти комбинации, похоже, не работают.
Заголовки не установлены по какой-либо причине.
Ответы
Ответ 1
Просто отправьте xml байты напрямую:
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import requests
xml = """<?xml version='1.0' encoding='utf-8'?>
<a>б</a>"""
headers = {'Content-Type': 'application/xml'} # set what your server accepts
print requests.post('http://httpbin.org/post', data=xml, headers=headers).text
Выход
{
"origin": "x.x.x.x",
"files": {},
"form": {},
"url": "http://httpbin.org/post",
"args": {},
"headers": {
"Content-Length": "48",
"Accept-Encoding": "identity, deflate, compress, gzip",
"Connection": "keep-alive",
"Accept": "*/*",
"User-Agent": "python-requests/0.13.9 CPython/2.7.3 Linux/3.2.0-30-generic",
"Host": "httpbin.org",
"Content-Type": "application/xml"
},
"json": null,
"data": "<?xml version='1.0' encoding='utf-8'?>\n<a>\u0431</a>"
}
Ответ 2
Перейдите в прямой XML вместо словаря.
Ответ 3
Я Python Noob и, когда я пытаюсь следовать примеру, я продолжаю получать UnicodeEncodeError.
xml = """<?xml version='1.0' encoding='utf-8'?>
<a>б</a>"""
headers = {'Content-Type': 'application/xml'}
print(requests.post('http://10.33.33.64/restapi/nodes', data=xml, headers=headers).text)
Это ошибка, которую я получаю
UnicodeEncodeError: 'latin-1' codec can't encode character '\u0431' in position 42: Body ('б') is not valid Latin-1. Use body.encode('utf-8') if you want to send it encoded in UTF-8.
Кроме того, в приведенном выше примере, где и как определяется фактическая полезная нагрузка XML?