Я отправляю запрос в FCM (Firebase Cloud Messaging) из скрипта PHP с Guzzle lib. На моей локальной машине - все работает, но на рабочем сервере я получаю сообщение об ошибке от службы FCM: 411 Content-Length required
.
Я проверил версию PHP, версию Guzzle lib, версию cURL - они все одинаковы для двух компьютеров.
Мой проект запускается с помощью докера, поэтому среда тоже такая же. А вот код того, как я отправляю сообщение в FCM:
$handler = new CurlHandler();
$stack = HandlerStack::create($handler);
$config['handler'] = $stack;
$client = new Client($config);
try {
$client->post($this->apiUrl, [
RequestOptions::JSON => $data,
RequestOptions::HEADERS => [
'Authorization' => sprintf('key=%s', "key"),
]
]);
} catch (TransferException $e) {
throw new \RuntimeException($e->getMessage(), $e->getCode(), $e);
}
Я знаю, что для решения проблемы недостаточно подробностей, поэтому попросите больше, если вам нужно. Также, может быть, есть идеи, как представить эту ошибку на моей локальной машине?
Я уже пытался вставить заголовок Content-Length
в свой запрос, он не помог.
UPD
FROM php:7.1-fpm-alpine
RUN apk --update --no-cache add libmcrypt-dev libmcrypt curl-dev libcurl \
&& docker-php-source extract \
&& docker-php-source delete \
&& docker-php-ext-install mcrypt pdo_mysql mbstring curl
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer --version
RUN chmod +x /usr/local/bin/composer
WORKDIR /var/www/project
UPD2
Я решил попробовать без жрета:
$curl = sprintf("curl -i -X POST https://fcm.googleapis.com/fcm/send -H 'Authorization: key=%s' -H 'Content-Type: application/json' -d '%s'", $message->getSender(), $data);
exec($curl, $output);
И результат тот же. Когда я запускаю этот скрипт в bash на рабочей машине - все ок. Но когда я запускаю его из PHP - я получаю ту же ошибку «411 Content-Length required».