通过 PHP cURL 发送多维 JSON 数据

Posted

技术标签:

【中文标题】通过 PHP cURL 发送多维 JSON 数据【英文标题】:sending multidimensional JSON data via PHP cURL 【发布时间】:2016-07-03 13:06:51 【问题描述】:

我正在开发一个 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);

当我将此 sn-p 用作单个脚本文件并在 php cli 中尝试时,它可以工作,但在 laravel 中它不起作用。我收到错误消息“超过 60 秒的最大执行时间。”

当我查看 *** 时,大多数示例都使用一维 json 对象,

php curl设置对json尺寸有什么限制吗?

当我搜索上面提到的错误时,我提到的错误与“max_input_time = 60”有关,但是当我将其更改为 120 或更高时,错误消息没有改变。

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

【问题讨论】:

【参考方案1】:

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

set_time_limit(int $seconds);

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

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

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

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

其他功能请参考curl_setopt

【讨论】:

当我从 js 发送相同的请求时,需要 1 秒才能获得响应,超过 60 秒是我在 js 中遇到的问题,我正在添加“content-type:application/json”标头并发送json在php中是错误的吗?参数是否应该采用 urlencoded 格式 a=b&c=d 在 JS 中只需要一秒钟但使用 Laravel 从 PHP 超时这一事实表明它正在遇到某种永无止境的循环。我怀疑将限制提高到 2 分钟会再次超时。尝试将 JSON 数据作为 'data='.urlencode($jsonData) 看看会发生什么。【参考方案2】:

您是否尝试过使用http_build_query() 而不是json_encode()

据我所知,php curl 上的 json 维度没有限制。 不过我从来没有使用过 laravel

【讨论】:

当我尝试 http_build_query() 时,我从 var_dump 收到消息 "string(41) "Unparsable argument: 2016-03-17 12:11:42"

以上是关于通过 PHP cURL 发送多维 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

通过 PHP cURL 将多维数组发布到 PayPal

如何通过 cURL/PHP 使用 PUT 方法将 JSON 数据发送到 API

php解析json数组

PHP如何通过Post请求发送Json数据

通过php curl发送json但没有得到回复

curl发送json格式数据