GCM curl操作超时

4

我有几个负责在服务器上执行GCM操作的PHP文件,当它们想要时它们似乎工作得很好,但它们经常返回一个错误,其中包含以下信息:

Curl错误: 操作在0毫秒后超时,收到0个字节的数据

这是服务器的问题还是我的GCM代码的问题?以下是我的PHP文件:

<?php

$message = urldecode($_POST['message']);
$order = urldecode($_POST['order']);
$registrationIDs = urldecode($_POST['registrationIDs']);
$apiKey = "API_KEY";
$tableID = urldecode($_POST['tableID']);

$url = 'https://android.googleapis.com/gcm/send';

$fields = array(
    'registration_ids' => array($registrationIDs),
    'data' => array(
        'message' => $message,
        'tableID' => $tableID,
        'order' => $order
    ),
);

$headers = array(
    'Authorization: key=' . $apiKey,
    'Content-Type: application/json'
);

// Open connection
$ch = curl_init();

// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));



// Execute post
$result = curl_exec($ch);
if(curl_errno($ch)) {
    echo 'Curl error: ' . curl_error($ch);
}

// Close connection
curl_close($ch);

echo $result;

?>

我建议您检查一下消息结构,因为这可能是您的问题所在。我正在执行与您相同的CURL连接,但我没有遇到任何问题。 - eloibm
1个回答

1

我已经尝试使用您的代码发送推送通知,并成功了。

对于测试,我建议您设置“dry_run”参数。您将向GCM发送消息,它将作为“虚假”响应返回给您。

现在是您的问题,我搜索了可能发生的情况,因为似乎您有curl限制或其他原因,但我不是这个主题的专家,所以这里有一些提示供您尝试:

  • 如果您通过浏览器运行脚本,则将set_time_limit设置为无限秒数。

    set_time_limit(0);

  • 使用此选项“CURLOPT_TIMEOUT”增加curl操作时间限制

    curl_setopt($ch, CURLOPT_TIMEOUT, 20); // 20 秒

  • 服务器可能会发生无限重定向。为了停止这种情况,请尝试禁用跟随位置运行脚本。

    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);


1
我会尝试这个,谢谢。我也不是 Curl 方面的专家,也不知道发生了什么事情,我只是按照说明来做。 - spongyboss
1
你好,再次感谢您的帮助,我已经尝试了一下,效果好多了! :) - spongyboss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接