1

我正在开发一个 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 是否有任何与此相关的配置。

4

2 回答 2

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

于 2016-03-17T10:01:12.947 回答
0

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

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

于 2016-03-17T09:45:09.503 回答