首页 > 解决方案 > PHP curl 行为不一致

问题描述

我正在为使用 PHP 的移动应用程序开发后端系统。该移动应用程序是使用 Expo 开发的。我想要做的是通过博览会服务器向设备发送推送通知。

我创建了一个辅助函数来执行一个 POST 请求来展示这里描述的推送通知端点。

/**
 * Perform POST request with curl.
 * 
 * @param string $url
 * @param mixed $params
 * @param array $headers
 * 
 * @return array
 */
function curl_post($url, $params = null, $headers = [])
{
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $params,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_HTTPHEADER => $headers,
    ]);
    $response = curl_exec($ch);
    $error = curl_error($ch);
    curl_close($ch);

    if (!empty($error)) {
        throw new \Error($error);
    }

    return json_decode($response, true);
}

起初,它就像一个魅力,但有时后来,它不起作用,因为 Expo 服务器无法识别我发送的参数。

奇怪的是,当我使用 guzzle 执行请求(使用相同的输入)时,它总是有效。使用 curl 时我是否缺少一些配置?或者这是 curl 的已知错误?

我正在使用带有 PHP 7.3.11 的 Windows 10 和 XAMPP 进行开发,我也在使用 Laravel 6 框架。

标签: phpexpophp-curl

解决方案


推荐阅读