Как отправить изображение в everypixel.com с помощью js или php?

Рейтинг: 0Ответов: 1Опубликовано: 15.03.2023

Получаю ошибку 403 Forbidden, как можно решить эту проблему

 <form action="#" method="post" enctype="multipart/form-data">
            <div class="api-kvadrat result">
                <input type="file" id="upload" name="upload">
            </div>
       </div>
       <div class="Api-everypixel-p">
        Попробуйте предварительно обученные<br> модели Everypixel в действии!
    </div>
    <input class="button-api" type="submit" name="submit" id="button"></input>
    </form>

Есть вот такая условная форма, суть проблемы в том что у меня не получается отправить заголовки авторизации, я получаю постоянно ошибку, на сайте предоставляется client_id и secret_key, как их отправить??, так же в начале документации написано про получение доступа на 1 час через токен, отправив curlom я получаю этот токен и вставляю в код но все равно та же фигня

document.addEventListener("DOMContentLoaded", () => {
btn = document.querySelector("#button");
btn.addEventListener("click", (event)=> {
    event.preventDefault();
   const file_attach = document.getElementById("upload");
   console.log(file_attach);
   const forms = document.querySelectorAll("form");    
   console.log(forms);        // формы
const message = {
   loading: "Отправка...",
   success: "Спасибо. Форма отправлена",
   failed: "Что-то пошло не так..."
};
file_attach.addEventListener("change", ()=> {
uploadFile(file_attach.files[0]);
});
const uploadFile = (file) => {
   console.log(file.name);

if (!["image/jpeg", "image/png", "image/gif", "image/svg+xml"].includes(file.type)) {
   alert("Разрешены только изображения.");
   return;
}
    if (file.size > 2 * 1024 * 1024) {
   alert("Файл должен быть не менее 2мб");
   return;
}
};
const fData = new FormData();
fData.append("file_attach", file_attach.files[0]);
try {
    const response = fetch('https://api.everypixel.com/v1/keywords?', {
        'headers': {
"authorization": "Bearer ki1dq5htHiUBOADaTmX4lKNtKPrlO2", 
"cache-control": "no-cache",
"content-type": "multipart/form-data; boundary=----WebKitFormBoundary92CbLHFeuOVMQpXq",
        }, 
    method: 'POST',
    body: fData,
    mode: "no-cors",
    credentials: "include",
    });
    const result = response.json();
    console.log('Успех:', JSON.stringify(result));
} catch(error) {
    
}
});
});

Вот сама ошибка я как понимаю у меня нет доступа и я думаю что я не правильно отправляю токен, в документации есть варианты решения проблемы с помощью php и python, но я начинающий и пытаюсь решить это тем что более менее понимаю

Если есть решение так же в php буду признателен если напишите как отправить файл через curl, я пытался но ничего не получается))))

В документации есть пример с помощью php и этот код решает проблему свыше, я получаю доступ но появляется другая для меня проблема я не могу отправить файл локально, на прямую по url все хорошо, вот и вся проблема, я убил достаточно времени на решение проблемы и ничего не получилось, перепробовал многие варианты и методы возможно я что то не понимаю и делаю не то)))

$authorization = "<your-client-id>" . ":" . "<your-client-secret>";
$url = "https://api.everypixel.com/v1/keywords?url=http://image.everypixel.com/2014.12/67439828186edc79b9be81a4dedea8b03c09a12825b_b.jpg&num_keywords=10";

$curl = curl_init();
curl_setopt($curl, CURLOPT_USERPWD, $authorization);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$data = curl_exec($curl);
curl_close($curl);

$json = json_decode($data);

Ответы

▲ 0Принят
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://api.everypixel.com/v1/keywords');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, [
  'file' => curl_file_create('/path/to/image.jpg', 'image/jpeg', 'image.jpg'),
]);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
  'Authorization: Bearer <your-token>',
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
var_dump($data);