LibreTranslate — разные результаты с JS fetch и PHP curl

Здравствуйте, я пытаюсь использовать этот API двумя разными способами, и я не получаю один и тот же ответ:

С Javascript:

const test = async () => {

    const res = await fetch("https://www.libretranslate.com/translate", {
        method: "POST",
        body: JSON.stringify({
            q: ["maison", "chat"],
            source: "fr",
            target: "es",
            format: "text",
            api_key: "XXXXXXXXXXX"
        }),
        headers: { "Content-Type": "application/json" }
    });
    console.info(await res.json());
}
test();

Результат, который я получаю здесь:

{ translatedText: [ 'casa', 'gato' ] }

Каков ожидаемый результат...

С PHP:

public function actionTest() {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://www.libretranslate.com/translate");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt(
        $ch,
        CURLOPT_POSTFIELDS,
        http_build_query([
            'q' => json_encode(["maison", "chat"]),
            'source' => 'fr',
            'target' => 'es',
            'format' => 'html',
            'api_key' => 'XXXXXXXXXXX'
        ])
    );

    // curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    //     'Content-Type: application/json'
    // ));

    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $server_output = json_decode(curl_exec($ch));
    print_r($server_output);
    curl_close($ch);
}

Результат, который я получаю здесь:

stdClass Object
(
    [translatedText] => ["maison", "chat"]
)

Что не ожидаемо..

Эта проблема возникает в PHP, когда я пытаюсь перевести несколько слов, если я перевожу только одно слово (например, «чат»), вот что я получаю:

stdClass Object
(
    [translatedText] => gato
)

Кроме того, как вы можете видеть в функции PHP, код, в котором я пытаюсь установить заголовки, закомментирован, потому что, когда я раскомментирую его, я получаю следующее:

stdClass Object
(
    [error] => The browser (or proxy) sent a request that this server could not understand.
)

Спасибо !

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
64
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я исправил это, используя json_encode для всех данных вместо http_build_query, я также раскомментировал настройки заголовка, вот мой рабочий код:

public function actionTest() {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "https://www.libretranslate.com/translate");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt(
        $ch,
        CURLOPT_POSTFIELDS,
        json_encode([
            'q' => ['maison', 'chat'],
            'source' => 'fr',
            'target' => 'es',
            'format' => 'html',
            'api_key' => 'XXXXXXXXXXX'
        ])
    );
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json'
    ));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $server_output = json_decode(curl_exec($ch));
    print_r($server_output);
    curl_close($ch);
}

и ответ:

(
    [translatedText] => Array
        (
            [0] => casa
            [1] => gato
        )

)

Другие вопросы по теме