WebDev2030
@WebDev2030
Битриксоид до мозга и костей

Как в bitrix отправить post данные через Bitrix\Main\Web\HttpClient?

Добрый день.
Пытаюсь сделать post-запрос через Bitrix\Main\Web\HttpClient. Запрос проходит, но почему-то данные не отправляются.
Код:
use Bitrix\Main\Web\HttpClient;
$key = "ТУТ МОЙ КЛЮЧ ОТ АПИ https://tinypng.com/developers";
$httpClient = new HttpClient(array(
    "waitResponse" => true
));
$httpClient->setAuthorization('api', $key);
$httpClient->setHeader('Content-Type', 'application/json', true);
$url = "https://bretel.kz/upload/iblock/ecd/ecd423080780dbae80bb088c911257e8.jpg";
$data = json_encode(array("source" => array("url" => $url)));
$response = $httpClient->post('https://api.tinify.com/shrink', $data);
var_dump($data);
var_dump($response);

В ответ от сервиса я получаю ошибку: "Request is invalid: request body has unknown key 'source'"
Хотя если сделать тоже самое через postMan то ответ приходит норм. Скриншоты postMan:
https://monosnap.com/file/r9n1EAuKBsg4MQC10R8xMn4z...
https://monosnap.com/file/VS8qVtI3DoSWqaCCdIp53Ixf...

Подскажите как верно отправить данные?
  • Вопрос задан
  • 6279 просмотров
Пригласить эксперта
Ответы на вопрос 2
@kudis
Bitrix developer
Ваш код будет отлично работать на 99,9% серверов, но, видимо из-за особенности данного сервиса, точнее обработки запросов на нём, для конкретной задачи не применим.

Могу предложить CURL решение:
$key = 'ТУТ МОЙ КЛЮЧ ОТ АПИ https://tinypng.com/developers';
$serviceUrl = 'https://api.tinify.com/shrink';
$imgUrl = 'https://tinypng.com/images/panda-happy.png';

$headers = [
    'Content-Type: application/json',
    'Accept: */*',
    'Authorization: Basic ' . base64_encode('api:' . $key)
];

$arData = [
    'source' => [
        'url' =>  $imgUrl
    ]
];

$myCurl = curl_init();
curl_setopt_array($myCurl, [
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_URL => $serviceUrl,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => json_encode($arData)
]);

$response = curl_exec($myCurl);

curl_close($myCurl);

var_dump($response);
Ответ написан
Комментировать
@AndreyVSmirnov
Скорее всего проблема в mbstring.func_overload.
Необходимо выполнить проверку системы и исправить все найденные ошибки.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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