尝试使用imgur API发布图像时,Xampp php权限被拒绝?

时间:2018-08-24 14:25:09

标签: php xampp imgur

我得到的错误:

  

警告:file_get_contents(https://api.imgur.com/3/image):打开流失败:HTTP请求失败! HTTP / 1.1 403权限被拒绝   C:\ xampp \ htdocs \ sn0 \ classes \ Image.php在第22行

     

注意:尝试获取非对象的属性   第25行的C:\ xampp \ htdocs \ sn0 \ classes \ Image.php

     

注意:尝试获取非对象的属性   第25行的C:\ xampp \ htdocs \ sn0 \ classes \ Image.php

这是我的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 :(得分:1)

您提出了错误的请求。

一开始,您需要生成您的客户ID(更多信息@ https://api.imgur.com/#registerapp

要执行此操作,请转到https://api.imgur.com/oauth2/addclient 和 选择未经用户授权的匿名用法选项作为授权类型。

使用授权:客户端ID ,而不是承载,您可以保留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);
    }
}

答案 1 :(得分:0)

file_get_contents()用于GET请求。您需要在PHP中使用CURL才能从服务器向另一个服务器发出POST请求。