#python #curl #python-requests
#python #curl #python-запросы
Вопрос:
В принципе, если я выполняю команду curl:
curl -k -u user:pass --header 'Content-Type: application/xml' --request POST --data '<LocalIDs><LocalID ID="9128615"/></LocalIDs>' --url https://rhtpcapc001:8182/pc/center/webservice/datasources/dataSourceConsoleName/Data Aggregator@RHTPCADA201/itemids
У меня есть следующий ответ:
<?xml version="1.0" encoding="UTF-8"?><ItemIDResults><ItemIDResult
LocalID="9528017" ItemID="828570"/></ItemIDResults>
Я создал скрипт на python для запуска этой команды:
#!/usr/bin/python
import requests
import urllib3
urllib3.disable_warnings()
headers = {
'Content-Type': 'application/xml',
}
data = {
'<LocalID ID': '"9528017"/>'
}
response = requests.post('https://rhtpcapc001:8182/pc/center/webservice/datasources/dataSourceConsoleName/Data Aggregator@RHTPCADA201/itemids', headers=headers, data=data, verify=False, auth=('user', 'pass'))
print (response.encoding)
print (response.headers['Content-Type'])
print (response.headers)
print (response.text)
print (response.content)
print (response.reason)`
и выдает мне следующую ошибку:
ISO-8859-1 text /plain {‘Set-Cookie’: ‘JSESSIONID=md1waumsuoe81jceaxacbqgid;Path=/pc;Secure’, ‘Срок действия’: ‘Чт, 01 янв 1970 00:00:00 GMT’, ‘Тип содержимого’: ‘текст/обычный’, ‘Дата’: ‘Вт, 09 Апр 2019 10:28:54 GMT’, ‘Длина содержимого’: ‘173’ , ‘Server’: ‘Jetty(9.3.5.v20151012)’} Произошло исключение JAXBException : ошибка синтаксического анализа в [row,col]:[1,1] Сообщение: Содержимое не разрешено в prolog.. Ошибка синтаксического анализа в [строка, столбец]:[1,1] Сообщение: Содержимое не разрешено в prolog.. произошло исключение b’JAXBException: ошибка синтаксического анализа в [row, col]:[1,1] nMessage: содержимое не разрешено в prolog.. Ошибка синтаксического анализа в [строка, столбец]: [1,1] nMessage: содержимое не разрешено в prolog.. ‘ Неверный запрос
Я думаю, что проблема заключается в кодировке. Когда я запускаю только команду curl:
КОМАНДА:
curl -k -u user:pass --header 'Content-Type: application/xml' --request POST --data '<LocalIDs><LocalID ID="9128615"/></LocalIDs>' --url https://rhtpcapc001:8182/pc/center/webservice/datasources/dataSourceConsoleName/Data Aggregator@RHTPCADA201/itemids
ВЫВОД:
<?xml version="1.0" encoding="UTF-8"?><ItemIDResults><ItemIDResult LocalID="9528017" ItemID="828570"/></ItemIDResults>
в ответе мы видим encoding =»UTF-8″
в скрипте python с response.encoding я вижу кодировку ISO-8859-1
заранее благодарю вас за всю помощь.
BR
Дэвид
Комментарии:
1. В вашем скрипте вы присваиваете данным значение something (
'<LocalID ID': '"9528017"/>'
что выглядит немного странно), но в командной строке вы передаете пустые данные. Какой из них правильный?2. @AndersLindahl ты прав. Это было неправильное копирование / вставка. Я уже отредактировал с помощью правильной команды curl. Спасибо.
3. Какой будет ответ, если вы измените
data = { '<LocalID ID': '"9528017"/>' }
наdata = { '<LocalID ID': '"9528017"/>'.encode('utf-8') }
4. @Frans все еще выдает ошибку. Результат: ‘ascii’ ‘текстовый / обычный’ и выдает те же ошибки ‘Содержимое не разрешено в prolog .. Ошибка синтаксического анализа в’
5. Думаю, я знаю, что не так: в curl вы отправляете XML
'<LocalIDs><LocalID ID="9128615"/></LocalIDs>'
. В скрипте Python вы отправляете dict{ 'Content-Type': 'application/xml', }
. Не могли бы вы попробовать эти варианты:data = '<LocalIDs><LocalID ID="9128615"/></LocalIDs>'
илиdata = '<?xml version="1.0" encoding="UTF-8"?>' '<LocalIDs><LocalID ID="9128615"/></LocalIDs>'
илиdata = '<?xml version="1.0" encoding="UTF-8"?>' '<LocalIDs><LocalID ID="9128615"/></LocalIDs>'.encode('utf-8')