ошибка запросов python: содержимое не разрешено в prolog

#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')