chazovs
@chazovs
Корпорация Центр

Как отправить multipart/form-data в Nyholm\Psr7?

Задача: отправить файл с помощью Nyholm/Psr7. Как понятно из названия, библиотека поддерживает PSR7. Я пробую сделать так:
$fileStream = $this->requestFactory->createStream('Привет мир');
            $uploadFile = $this->requestFactory->createUploadedFile($fileStream, clientFilename: 'document');

            $uriString = $this->url . '/' . $endpoint . '?' . http_build_query($query);
            $uriObject = $this->requestFactory->createUri($uriString);

           $request = $this->requestFactory->createRequest(Request::METHOD_POST, $uriObject)
            ->withHeader('Content-Type', $contentType)
            ->withBody($uploadFile->getStream())
        ;


requestFactory - это Nyholm\Psr7\Factory\Psr17Factory

Как правильно это делать?
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 1
chazovs
@chazovs Автор вопроса
Корпорация Центр
Я понимаю, что фабрика запросов, никуда их сама не отправляет) Саму отправку я пытаюсь сделать с помощью Psr18Client. Я просто опустил эту строку. Вот она:
$this->client->sendRequest($request);

Я пытаюсь отправить файл в телеграм вот этим способом https://core.telegram.org/bots/api#senddocument
Я знаю, как это сделать через curl:
curl --location --request POST 'https://api.telegram.org/botX?chat_id=X&text=тестовое сообщение&parse_mode=markdown' \
--header 'Content-Type: multipart/form-data' \
--form 'document=@"/какой-то путь/test.txt"'

Это работает из Postman. 62fb289181596955805239.png

Но как повторить это в коде? Нашел какой-то createServerRequest. Возвращает ServerRequestInterface у которого есть метод withUploadedFiles. Но это пока тоже не работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы