Хобрук: Ваш путь к мастерству в программировании

Как я могу ПОСТАВИТЬ запись через веб-сервис Prestashop (остальное API)

Как я могу отправить HTTP-запрос PUT без PHP?

Я использовал PHP кучу, но теперь я пишу для смартфона. (Использование Swift, Java и C#). (Если спросят, я могу показать быстрый код, который я использую.)

GET прост, вы также можете просто указать URL-адрес в веб-браузере, чтобы получить ответ. У меня есть несколько способов получить клиентов, адреса, продукты и т. д., и они хорошо работают. (У меня также есть много объектных моделей, таких как структура таблицы базы данных, в которых хранятся данные.). (Поскольку JSON гораздо проще декодировать/кодировать, я применяю "&output_format=JSON". Если бы я только мог также PUT/POST JSON...)

ПОЧТА тоже работает! Я могу ПОЛУЧИТЬ пустую схему, вставить новые данные (используя обычный текст) и отправить (POST) XML на URL-адрес. Он делает свое дело и отправляет ответ, содержащий вставленную запись с деталями, завернутыми в CDATA. (т.е. <abc><![CDATA[input_data]]></abc>, где я хочу вставить input_data в abc) Ответ включает назначенный идентификатор. Это прекрасно работает!

Однако, когда дело доходит до запроса PUT (и, возможно, DELETE в будущем...), я продолжаю получать ошибки.

Используя Fiddler, я могу просмотреть точную транзакцию (запрос и ответ).

Я также использовал клиентское приложение REST (от WizTools.org), и его ответ был исключен.

Но с PUT - чтобы обновить детали, я сначала ПОЛУЧИЛ изменение записи (по идентификатору) по мере необходимости, а затем ВЕРНУЛ XML обратно на тот же URL-адрес. Так что это похоже на выше, но это не удается:

(Вместо этого было бы проще отправить JSON.)

PUT http://example.com/api/customers?ws_key=ABC..XYZ
Content-Type: application/xml; charset=utf-8
Accept: */*
...

<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<customer>
<id>
 ...
</customer>
</prestashop>

Он отвечает:

HTTP/1.1 500 Internal Server Error
Content-Type: text/xml; charset=utf-8
...

<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<errors>
<error>
<code><![CDATA[127]]></code>
<message><![CDATA[XML error : String could not be parsed as XML
XML length : 0
Original XML : ]]></message>
</error>
</errors>
</prestashop>

Что мне нужно для отправки XML с помощью PUT?

Чем PUT отличается от POST, какие дополнительные шаги необходимы?

28.06.2018

  • кажется решением здесь prestashop .com/forums/topic/ 19.10.2018
  • и еще один здесь stackoverflow.com/questions/33202641/ 19.10.2018
  • @codebrane Я пытался использовать Content-Type: application/x-www-form-encoded; charset=UTF-8 с префиксом xml=... и без него, ответ говорит, что строка не может быть проанализирована как XML. (Когда я некоторое время назад читал исходный код, мне казалось, что префикс xml= является необязательным). И первая леди сказала, что и тот, и другой контент-тип не удался, однако ее ошибка отличается от моей. Все обязательные поля заполнены. Если ничего не работает, я бы предположил, что ошибка связана с некоторыми мерами безопасности, принятыми хостинговой компанией, но GET, POST и DELETE работают нормально - это не имеет смысла. 20.10.2018
  • Wireshark указывает, что ответ 501 String не может быть проанализирован, поскольку XML является HTTP/XML, что соответствует заголовку Content-Type: text/xml. Однако я попытался отправить тот же запрос, что и в примере в решении 2 (порядок) (используя заголовок... form...), снова та же ошибка. Каждый запрос получает ACK. Но все равно получаю ошибку 501! PS Если я пропускаю обязательное поле в POST-запросе, в ответе написано Bad Passwd, например - IE объяснительный. 20.10.2018
  • Можете ли вы подтвердить, что XML действительно действителен? Попробуйте запустить его через такой валидатор. xmlvalidation.com Кроме того, где находится документация для конечной точки, к которой вы пытаетесь подключиться? Возможно, есть обязательное поле, которое вам не хватает? 24.10.2018
  • @colefner Ошибок не обнаружено. Более того, я пробовал как минимум 3 ресурса, каждый из которых использует разные элементы/свойства XML, и я все еще получаю положительные результаты для GET, POST и DELETE. Но всегда получайте отрицательный результат (ошибка 50x) для любого запроса PUT. Хотя мне нравится ваша идея - обычно виновата фундаментальная проблема. 25.10.2018
  • Стрелять. Я надеялся, что это было что-то простое (часто так и есть). На данный момент мало что можно сделать, не зная API (или, по крайней мере, не имея ссылки на документы). Можете ли вы связаться с кем-нибудь из службы поддержки Prestashop? Или, может быть, попробовать их форум? prestashop.com/forums 25.10.2018
  • @colefner Я писал на форумах Prestashop, ответа пока нет. Их документ (для PUT) очень короткий - Добавление и редактирование ресурса. Чтобы отредактировать существующий ресурс: ПОЛУЧИТЕ полный файл XML для ресурса, который вы хотите изменить (/api/customers/7), отредактируйте его содержимое по мере необходимости, затем PUT весь XML-файл снова возвращается к тому же URL-адресу. Можно отправить новую запись (требуются только обязательные поля), и Prestashop добавит ее и ответит полным XML (все поля и атрибуты). Ответ, вероятно, отличается от запроса. И этот процесс работает. 25.10.2018
  • @YumaTechnicalInc Тяжело работать с недостаточно поддерживаемым API. Я хотел бы помочь больше. Удачи! 25.10.2018

Новые материалы

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

стройный-i18следующий
Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..