无法使用php在post方法中接收使用curl提交的数据

时间:2018-04-04 08:35:44

标签: php curl

我一直试图在php中使用post和curl传递数据,这是接收数据的代码

<?php
# required headers
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");

# include database and object files
require_once "vendor/autoload.php";

use \Database\Db as Db;
use \Objects\Leads as Leads;

# get database connection
$database = new Db();
$database->Connect(
  getenv('DB_CONNECTION'),
  getenv('DB_DATABASE'),
  getenv('DB_USERNAME'),
  getenv('DB_PASSWORD'),
  getenv('DB_HOST')
);

# prepare product object
$leads = new Leads($database);

# get id of product to be edited
$fp = fopen('php://input', 'r');
$data = stream_get_contents($fp);

echo "<pre>";
print_r($rawData);
echo "</pre>";

这是发送数据的代码

    $param = [
      'id'         => $result['id'],
      'transfered' => true
    ];

    $param = json_encode($param);
    $r = self::postSubmit($this->url . 'store.php', $param);
    dump($r);

和功能代码

  public function postSubmit($url, $param)
  {
    $ch = curl_init( $url );
    curl_setopt( $ch, CURLOPT_POST, 1);
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $param);
    curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt( $ch, CURLOPT_HEADER, 0);
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1);

    return curl_exec($ch);
  }

但是当我尝试运行代码以查看结果时

结果只是"" 并且在数据库中没有任何变化

我的代码错了吗?

1 个答案:

答案 0 :(得分:1)

也许这不是主要原因,但肯定也是一个问题:

$param = json_encode($param);

从代码中删除该行或将其更改为

$param = http_build_query($param);

因为CURLOPT_POSTFIELDS不支持json - 它支持urlencoded字符串或普通数组。我建议只使用普通数组 - 不需要打扰类型转换。