@RA
RA
29 Mar 2018
  1. Разработчики апи делают приём нескольких файлов под одним параметром. Вот так - нам можно слать пачку файлов в параметре image.

  2. Php не может отправить несколько файлов под одним параметром.

Пиздец. Каждый пункт - пиздец.

29 Mar 2018

RA, попробуй слать в виде image[]

29 Mar 2018

Это первое что я проверил. И так не работает.

Фишка в том, что когда добавляешь один файл
$post = array( 'image'=> curl_file_create($file, 'image/jpeg', 's.jpg') );
то норм. Но как добавить второй, с таким же именем?

Вариант
$post = array( 'image[0]'=> curl_file_create($file1, 'image/jpeg', 's.jpg'), 'image[1]'=> curl_file_create($file2, 'image/jpeg', 's.jpg') );
повторюсь нерабочий.

Пришлось делать костыль-изврат отправки контента "вручную" через boundary.

В то же время на pyton это выглядит примерно так
current_files.append( ('image', ('', open(name1, 'rb'), 'image/jpeg')) )
current_files.append( ('image', ('', open(name2, 'rb'), 'image/jpeg')) )
resp = requests.request("POST", url=args.index, files=current_files)

Да и RFC позволяет токое делать.

#mxywu/2 в ответ на /1
30 Mar 2018

RA, ну так это проблема в PHP, остальным пофигу. :)

#mxywu/3 в ответ на /2
30 Mar 2018

Кстати, я тогда не очень понимаю, что подразумевалось под "PHP не может"? Встроенные функции CURL - это же один из вариантов только.

#mxywu/7 в ответ на /6
30 Mar 2018

подразумевалось стандартный php

#mxywu/8 в ответ на /7
30 Mar 2018

Что такое стандартный PHP?
В нём есть из коробки сокеты. Там тебя ничего не ограничивает в формировании запросов и следовании RFC.

#mxywu/9 в ответ на /8
30 Mar 2018

skobkin-ru, например, дефолтная разбиралка запроса такое не переварит в принципе. Да, в php есть php://input (который рекомендуют использовать для обработки запросов с Content-type: application/json), но он пустой для запроса с Content-type: form/multipart, и такой запрос полностью ты не получишь никак. :)

Ну и для отправки нужно ставить тот же гузл или заморачиваться с сокетами.: )

#mxywu/11 в ответ на /7
30 Mar 2018

RA, сейчас есть 100500 пакетов на любой вкус и цвет. Не нужно заморачиваться с голым пхп.

#mxywu/12 в ответ на /8
30 Mar 2018

RA, ну вот guzzle написан на стандартном пхп :)
Переизобретать велосипед не нужно, нужно его использовать.
В предыдущем проекте тимлид бил по рукам за использование курла. :)

#mxywu/13 в ответ на /8
30 Mar 2018

Daemon, кстати, вот теперь мне интересно, PSR7 поможет разобрать такой запрос?

#mxywu/14 в ответ на /11
30 Mar 2018

В принципе — может, но для этого нужен ReactPHP или что-то еще, mod_php или php-fpm испортят всю малину.

#mxywu/16 в ответ на /14
30 Mar 2018

RA, curl для guzzle — лишь один из бэкендов.
https://github.com/guzzle/g.../master/src/Handler/
Если у тебя в коде идут прямые обращения к курлу — ты не сможешь его нормально замокать для тестов.

#mxywu/17 в ответ на /15

Добавить пост

Вы можете выбрать до 10 файлов общим размером не более 10 МБ.
Для форматирования текста используется Markdown.