Как использовать запросы python для PUT модели pmml для opencoring

Я пытаюсь использовать запросы python для размещения модели .pmml на локальном сервере OpenScoring.
Это работает (из каталога, содержащего DecisionTreeIris.pmml):

curl -X PUT --data-binary @DecisionTreeIris.pmml -H "Content-type: text/xml" http://localhost:8080/openscoring/model/DecisionTreeIris

Это не:

import requests
file = '/Users/weitzenfeld/IntelliJProjects/openscoring/openscoring-server/etc/DecisionTreeIris.pmml'
r = requests.put('http://localhost:8080/openscoring/model/DecisionTreeIris', files={'file': open(file, 'rb')})
r.text

возвращает:

u'<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>\n<title>Error 415 </title>\n</head>\n<body>\n<h2>HTTP ERROR: 415</h2>\n<p>Problem accessing /openscoring/model/DecisionTreeIris. Reason:\n<pre>    Unsupported Media Type</pre></p>\n<hr /><i><small>Powered by Jetty://</small></i>\n</body>\n</html>\n'

Я также пробовал:

r = requests.put('http://localhost:8080/openscoring/model/DecisionTreeIris', files={'file': open(file, 'rb')}, headers={'Content-type': 'text/xml', 'Accept': 'text/xml'})
r.text

который возвращает:

u'<html>\n<head>\n<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1"/>\n<title>Error 406 </title>\n</head>\n<body>\n<h2>HTTP ERROR: 406</h2>\n<p>Problem accessing /openscoring/model/DecisionTreeIris. Reason:\n<pre>    Not Acceptable</pre></p>\n<hr /><i><small>Powered by Jetty://</small></i>\n</body>\n</html>\n'

Обратите внимание, что моя попытка python такая же, как и в принятом ответе на этот вопрос: Использование Python для PUT PMML .

Кроме того, кто-то с> 1500 rep должен подумать о том, чтобы сделать тег «openscoring».


person Dan    schedule 30.10.2014    source источник


Ответы (2)


Вы должны проверить аннотации метода org.openscoring.service.ModelResource#deploy(String, HttpServletRequest) на наличие допустимых типов MIME запроса/ответа.

Первый запрос завершается ошибкой, поскольку сервер принимает только полезные данные application/xml и text/xml. Второй запрос завершается ошибкой, потому что сервер отправляет application/json полезных нагрузок, а ваш клиент готов принять только text/xml полезных нагрузок.

person user1808924    schedule 30.10.2014
comment
Я проверил аннотации и прочитал документы запросов, но до сих пор не понял. - person Dan; 31.10.2014
comment
Во второй попытке измените заголовки на следующие: headers={'Content-type': 'text/xml', 'Accept': 'application/json'}. - person user1808924; 31.10.2014
comment
Ошибка 400: неверный запрос - person Dan; 01.11.2014

Решение заключалось в том, чтобы поместить данные, а не обработчик файла:

r = requests.put('http://localhost:8080/openscoring/model/DecisionTreeIris', data=open(file, 'rb'), headers={'Content-type': 'text/xml', 'Accept': 'text/xml'})
person Dan    schedule 30.01.2015