【发布时间】:2014-07-23 23:33:36
【问题描述】:
我正在尝试使用输出表单下方的代码向 android 设备发送通知消息,结果是
Curl failed: Failed to connect to android.googleapis.com port 443:
Connection timed out
我的服务器是亚马逊 ec2。
我的代码:
public function send_notification($registatoin_ids, $message) {
// Set POST variables
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registatoin_ids,
'data' => $message,
);
$headers[] = 'Content-Type:application/json';
$headers[] = 'Authorization:key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
// 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_FOLLOWLOCATION, false);
curl_setopt($ch, CURLOPT_HEADER, true);
// Disabling SSL Certificate support temporarly
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
// Execute post
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
// Close connection
curl_close($ch);
echo $result;
}
我刚刚在另一台正在运行的服务器上尝试了代码
{"multicast_id":5322863685330856855,"success":1,"failure":0,"canonical_ids":0,
"results":[{"message_id":"0:1401820119301203%a5dcde78f9fd7ecd"}]}
所以我认为亚马逊 ec2 设置有问题
【问题讨论】:
-
我从未使用过 Amazon EC2,但我很确定 443 端口已打开。测试这个:stackoverflow.com/a/11253231/1788704 和这个:stackoverflow.com/a/21487471/1788704。这个对我有用。因此您可以删除
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false) -
我尝试了第一个链接中的代码,它给了我相同的结果。
-
我检查了这两个端口都打开了
-
谢谢@kmas 443 端口没有打开
标签: php android curl amazon-ec2 google-cloud-messaging