通过 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 数据的主要内容,如果未能解决你的问题,请参考以下文章