通过cURL POST PHP传递JSON

时间:2015-02-03 13:58:50

标签: php json laravel curl laravel-4

我一直在尝试使用cURL通过我的网络应用程序传递JSON - 现在我有点卡住了。

以下是我尝试的内容:

  

第1步:

我尝试使用此

发布 JSON
<?php 

  public function post(){

    $cars = array("Volvo", "BMW", "Toyota");
    $json = json_encode($cars);

    $ch = curl_init("http://localhost/api_v2/url?key=***");

    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array('json' => $json));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    $response = curl_exec($ch);
    curl_close($ch);

  }

?>
  

第2步:

我尝试使用此

接收 JSON
public function get(){

        $json = json_decode(Input::get('json'));
        dd($json); // null

    }
  

结果:    - 当我dd($json);

时,我一直变空

有人可以帮我指出我做错了什么吗?


  

明细:

  • 我使用PHP Framework:Laravel 4.0
  • 我很肯定URL参数是正确的,因为我可以使用它
  • 我也确定JSON没有被破坏,因为在添加print("<h1> JSON </h1><pre>".print_r($json,true)."</pre><br><hr><br>");后我可以看到我的JSON显示正常。

  • 请参阅Image

3 个答案:

答案 0 :(得分:0)

就您的调试工作而言,您应该转储响应而不是json_decode(s)尝试解析它。

所以改变这个

public function get() {
    $json = json_decode(Input::get('json'));
    dd($json); // null
}

到这个

public function get() {
    dd(Input::get('json'));
}

这应该更好地帮助您找出真正的问题,这很可能是服务器没有使用有效的JSON进行响应。

另一种选择是使用json_last_error来查看响应无法解析的原因。

public function get() {
    $json = json_decode(Input::get('json'));

    // If the response was parseable, return it
    if($json !== null)
        return $json;

    // Determine if the response was a valid null or
    // why it was unparseable
    switch (json_last_error()) {
        // The server could respond with a valid null,
        // so go ahead and return it.
        case JSON_ERROR_NONE:
            return $json;
        case JSON_ERROR_DEPTH:
            echo ' - Maximum stack depth exceeded';
            break;
        case JSON_ERROR_STATE_MISMATCH:
            echo ' - Underflow or the modes mismatch';
            break;
        case JSON_ERROR_CTRL_CHAR:
            echo ' - Unexpected control character found';
            break;
        case JSON_ERROR_SYNTAX:
            echo ' - Syntax error, malformed JSON';
            break;
        case JSON_ERROR_UTF8:
            echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
            break;
        default:
            echo ' - Unknown error';
            break;
        }
}

答案 1 :(得分:0)

您似乎没有返回cURL电话的结果。

public function post()
{
   // The first part of your original function is fine...

   $response = curl_exec($ch);
   curl_close($ch);

   // But you need to return the response!
   return $response;
}

答案 2 :(得分:0)

如果您的客户端是脚本(即:不是浏览器),则无法在服务器端打印内容。

您在服务器端打印的所有内容都将返回给客户端(post()脚本)。

话虽这么说,你的json应该出现在$response变量中。你可以输出。但这不是调试api请求的最佳方法。

更简单的方法是删除dd()并写入日志文件。