POST-запрос к API Prestashop с Python

Я добиваюсь перечисления и создания продуктов через Prestashop API. Я хочу немного автоматизировать процесс обновления продукта на своем веб-сайте.

Но у меня проблема с загрузкой изображений как при создании нового продукта с изображением, так и при загрузке изображения в продукт, который я создаю через веб-сервис.

Я не вижу ошибок в своем коде, поэтому хочу знать, сделал ли я ошибку при использовании Prestashop API.

Мой код:

def addNewImage(product_id):
   file = 'foto.png'
   fd = io.open(file, "rb")
   data = fd.read()
   r = requests.post(urlimg + product_id, data=data,auth=(key,""), headers={'Content-Type': 'multipart/form-data'})
   print(r.status_code)
   print(r.headers)
   print(r.content)

Prints:

500
{'Server': 'nginx', 'Date': 'Fri, 31 May 2019 09:18:27 GMT', 'Content-Type': 'text/xml;charset=utf-8', 'Transfer-Encoding': 'chunked', 'Connection': 'keep-alive', 'Access-Time': '1559294307', 'X-Powered-By': 'PrestaShop Webservice', 'PSWS-Version': '1.7.5.2', 'Execution-Time': '0.003', 'Set-Cookie': 'PrestaShop-30ff13c7718a401c862ad41ea4c0505f=def50200b7a8c608f3053d32136569a34c897c09cea1230b5f8a0aee977e6caac3e22bea39c63c30bfc955fe344d2cbabf640dc75039c63b33c88c5f33e6b01f2b282047bfb0e05c8f8eb7af08f2cc5b0c906d2060f92fea65f73ce063bf6d87bd8ac4d03d1f9fc0d7b6bf56b1eb152575ef559d95f89fc4f0090124630ae292633b4e08cfee38cee533eb8abe151a7d9c47ed84366a5dd0e241242b809300f84b9bb2; expires=Thu, 20-Jun-2019 09:18:27 GMT; Max-Age=1728000; path=/; domain=example.com; secure; HttpOnly', 'Vary': 'Authorization', 'MS-Author-Via': 'DAV'}

b'<?xml version="1.0" encoding="UTF-8"?>
\n<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
   \n<errors>
        \n<error>
            \n<code><![CDATA[66]]></code>
            \n<message><![CDATA[Unable to save this image]]></message>
        \n</error>
    \n</errors>
\n</prestashop>\n'

Я пробую использовать библиотеку протоколирования python, но говорю мне только следующее:

DEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): midominio:443

DEBUG:urllib3.connectionpool:https://midominio:443 "POST /api/images/products/20 HTTP/1.1" 500 None

Также я пытаюсь изменить файл config / define.inc.php, который я прочитал на форуме prestashop, в активный режим отладки, но без разницы.

Также я проверяю библиотеку prestapyt (и prestapyt3), но не работаю с python 3, и я читал, что они несовместимы с presta 1.7.

Изменить: Display_errors и log_errors активированы в моей панели Plesk:  введите описание изображения здесь

Но когда я перехожу к var / www / vhosts / midominio / logs / error_log

Я не вижу ни одной ошибки, связанной с php, или ошибки 500 в любой строке.

Заранее благодарим за любое предложение ...

Изменить: я проверяю предложение в ответ, но возвращаю ту же ошибку.


person Peisou    schedule 03.06.2019    source источник
comment
Можете ли вы включить log_errors в php.ini и проверить журнал ошибок PHP, чтобы узнать, что вызвало ошибку 500?   -  person Bruno Leveque    schedule 04.06.2019


Ответы (1)


Я думаю, что проблема в команде post, если все остальное работает нормально на бэкэнде. data используется для отправки данных формы и других текстовых данных. Чтобы загрузить файл, вы должны сделать это так:

files = {'media': open('test.jpg', 'rb')}
requests.post(url, files=files)

Итак, ваш код переводится как:

def addNewImage(product_id):
   file = 'foto.png'
   fd = io.open(file, "rb")
   r = requests.post(urlimg + product_id, auth=(key,""), headers={'Content-Type': 'multipart/form-data'}, files={ 'media' : fd })
   print(r.status_code)
   print(r.headers)
   print(r.content)
person kaushik94    schedule 07.06.2019
comment
@Peisou при поиске в Google я нашел это: medium.com / @ altin / - person kaushik94; 10.06.2019
comment
Спасибо за ваше предложение, я проверяю его, но изображение, которое я хочу сохранить, представляет собой png размером 32 КБ .. Измените его, но с той же ошибкой. - person Peisou; 11.06.2019
comment
Я уверен, что это глупый вопрос, но что произойдет, если вы попытаетесь сохранить в формате, отличном от .png? - person jeremiah; 13.06.2019
comment
Я тоже пробую с jpg. Извините, @jeremiah, я не вижу сообщения - person Peisou; 18.06.2019