Php 使用curl来post请求处理JSON数据

Php 使用curl来post请求处理JSON数据,php,curl,image-compression,kraken-image-optimizer,Php,Curl,Image Compression,Kraken Image Optimizer,我最近使用了kraken.io API,并试图将此API与我的PHP CodeIgniter框架集成。所以我遵循了文档,但当我使用curl 下面是我的源代码 require_once(APPPATH.'libraries/kraken-php-master/Kraken.php'); $kraken = new Kraken("SOME_KEY", "SOME_SECRET"); $params = array( "file"

我最近使用了kraken.io API,并试图将此API与我的PHP CodeIgniter框架集成。所以我遵循了文档,但当我使用
curl

下面是我的源代码

require_once(APPPATH.'libraries/kraken-php-master/Kraken.php');
        $kraken = new Kraken("SOME_KEY", "SOME_SECRET");


        $params = array(
                "file" => base_url()."include/".$dataIn['logo'],
                "wait" => true
        );

        $dataj='{"auth":{"api_key": "SOME_KEY", "api_secret": "SOME_SECRET"},"file":'.base_url()."include/".$dataIn['logo'].',wait":true}';
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, "https://api.kraken.io/v1/upload");
        curl_setopt($ch, CURLOPT_HTTPHEADER,array('Content-Type: application/json')); 

        curl_setopt($ch, CURLOPT_POSTFIELDS, $dataj);
        $response = curl_exec($ch);
        curl_close($ch);

        $data = $kraken->upload($params);
        print_r($response);exit();
我得到了这个结果

"{"success":false,"message":"Incoming request body does not contain a valid JSON object"}1"
谁能帮帮我吗


提前感谢,

不要发布您的API密钥和API密钥

错误消息非常清楚,您的json对象无效。例如,对于您的请求,这将是一个有效的JSON对象:

{
    "auth": {
        "api_key": "SOME",
        "api_secret": "SECRET"
    },
    "file": "somefile.txt",
    "wait": true
}
在php代码中,您正在设置一个$params数组,但随后您没有使用它。试试这个:

$dataj='{"auth":{"api_key": "SOME_KEY", "api_secret": "SOME_SECRET"},"file":"' . $params["file"]. '", "wait":true}';

您可以验证您的

您应该使用
json\u encode
函数来生成json数据

$dataj = json_encode([
    "auth" => [
        "api_key" => "API_KEY",
        "api_secret" => "API_SECRET"
    ],
    "file" => base_url() . "include/" . $dataIn['logo'],
    "wait" => true
]);
编辑: 下面是一个示例,您不需要使用
curl

require_once("Kraken.php");

$kraken = new Kraken("your-api-key", "your-api-secret");

$params = array(
    "file" => "/path/to/image/file.jpg",
    "wait" => true
);

$data = $kraken->upload($params);

if ($data["success"]) {
    echo "Success. Optimized image URL: " . $data["kraked_url"];
} else {
    echo "Fail. Error message: " . $data["message"];
}

你能发一份你发出的json吗?在您添加了
base\u url
$dataIn
{“auth”:{“api\u key”:“38cd89fd7fc2b420”,“api\u secret”:“9d980cb857ee2d6779c1d”},“url”:“http:\/\/localhost\/design ninja\/包括/从2017-02-23\u 12-54-576.png上传\/屏幕截图”;“wait”:true}感谢您的回复并感谢您对key的建议,这不起作用,或者我没有很好地编写代码,因为我在post API key和Secret之前删除了一些字符。感谢您的回复,我尝试了json_编码格式,但出现了以下错误{“success”:false,message:“在请求中找不到文件”}检查
$dataj['file']
,这必须是文件的正确路径/url