Отказано в разрешении Xampp php при попытке опубликовать изображения с помощью imgur api? - PullRequest
0 голосов
/ 24 августа 2018

Я получаю ошибку:

Предупреждение: file_get_contents (https://api.imgur.com/3/image): не удалось открыть поток: ошибка HTTP-запроса! HTTP / 1.1 403 Отказано в доступе C: \ xampp \ htdocs \ sn0 \ classes \ Image.php в строке 22 * ​​1006 *

Примечание: попытка получить свойство необъекта в C: \ xampp \ htdocs \ sn0 \ classes \ Image.php в строке 25

Примечание: попытка получить свойство необъекта в C: \ xampp \ htdocs \ sn0 \ classes \ Image.php в строке 25

Вот мой файл Image.php:

<?php
class Image {

        public static function uploadImage($formname, $query, $params) {
                $image = base64_encode(file_get_contents($_FILES[$formname]['tmp_name']));

                $options = array('http'=>array(
                        'method'=>"POST",
                        'header'=>"Authorization: Bearer ###\n".
                        "Content-Type: application/x-www-form-urlencoded",
                        'content'=>$image
                ));

                $context = stream_context_create($options);

                $imgurURL = "https://api.imgur.com/3/image";

                if ($_FILES[$formname]['size'] > 10240000) {
                        die('Image too big, must be 10MB or less!');
                }

                $response = file_get_contents($imgurURL, false, $context);
                $response = json_decode($response);

                $preparams = array($formname=>$response->data->link);

                $params = $preparams + $params;

                DB::query($query, $params);

        }

}
?>

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

file_get_contents() используется для запросов GET. Вам нужно использовать CURL в PHP, чтобы сделать POST-запрос от сервера к другому.

0 голосов
/ 24 августа 2018

Вы делаете неверный запрос.

Вначале вам нужно сгенерировать свой идентификатор клиента (подробнее @ https://api.imgur.com/#registerapp)

Для этого перейдите на https://api.imgur.com/oauth2/addclient а также Выберите Анонимное использование без опции авторизации пользователя в качестве Типа авторизации.

Использовать авторизацию: Client-ID не Bearer, вы можете сохранить file_get_contents (поэтому - тогда вам нужно изменить только заголовок авторизации), но CURL будет лучше для этого.

Пример с CURL:

<?php
class Image
{
    public static function uploadImage($formname, $query, $params)
    {
        $client_id = 'YOUR CLIENT ID';
        $image = base64_encode(file_get_contents($_FILES[$formname]['tmp_name']));
        $curl = curl_init();
        curl_setopt_array($curl, array(
            CURLOPT_URL => 'https://api.imgur.com/3/image.json',
            CURLOPT_TIMEOUT => 30,
            CURLOPT_HTTPHEADER => array(
                'Authorization: Client-ID ' . $client_id
            ) ,
            CURLOPT_POST => TRUE,
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_POSTFIELDS => array(
                'image' => $image
            )
        ));
        $out = curl_exec($curl);
        curl_close($curl);
        $response = json_decode($out);
        $preparams = array(
            $formname => $response->data->link
        );
        $params = $preparams + $params;
        DB::query($query, $params);
    }
}
...