通过PHP cURL发送多维JSON数据

时间:2016-03-17 09:20:46

标签: php json laravel curl php-curl

我正在开发一个http客户端并选择php curl扩展来发出http请求。 Api需要多维json 作为参数。

    $jsonData = json_encode($data);

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST,1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
            'Content-Type: application/json',
            'Content-Length: ' . strlen($jsonData))
    );

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

当我使用这个片段作为单个脚本文件并尝试在php cli中它可以工作但是在laravel中它不起作用。我收到错误“超出60秒的最大执行时间。”

当我查看stackoverflow时,大多数示例使用单维 json 对象,

  • 关于json尺寸的php curl设置是否有任何限制?
  • 当我搜索上面提到的错误与“max_input_time = 60”有关但当我将其更改为120或更高时,错误消息没有改变。

  • 我正在使用 laravel 框架,并且laravel具有与此相关的任何配置。

2 个答案:

答案 0 :(得分:0)

您是否尝试过使用http_build_query()代替json_encode()

据我所知,对php curl的json维度没有限制。 我从未使用laravel

答案 1 :(得分:0)

您可以使用PHP脚本中的以下函数覆盖PHP时间限制。

set_time_limit(int $seconds);

这应该可以解决60秒后请求超时的问题,但是,我会质疑为什么请求开始这么长时间。

为了测试API,我通常使用Google Chrome和高级REST客户端插件,这样可以制作请求并将其保存在浏览器中。 JSON在多维方面没有任何限制,因为我过去曾经使用过几层。

我的理解是POSTFIELDS期待一个数组,因此您可以将您的请求修改为POSTFIELDS:

curl_setopt($ch, CURLOPT_POSTFIELDS, 'data='.$jsonData);

对于其他功能,请参阅curl_setopt