直到几天前,一切都进展顺利,但现在,Curl已停止使用HTTPS处理地址。
这是代码:
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => array($registation_ids),
'data' => array( "message" => $message,
"title" => $title,
"params" => $params,
"code" =>$code),
);
$headers = array(
'Authorization: key=' . GOOGLE_API_KEY,
'Content-Type: application/json'
);
$ch = curl_init();
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));
$result = curl_exec($ch);
这段代码已经运行了一年多。但现在它返回了这个:
代理错误
代理服务器收到来自上游服务器的无效响应。 代理服务器无法处理请求GET /应用程序/ test_notifications。
原因:从远程服务器读取错误
Apache / 2.2.15(Red Hat)服务器位于app-servername.rhcloud.com端口80
但是,如果在上一代码中我从s
移除了https:// ...
,就像http://android.googleapis.com/gcm/send
一样,请求发送没有问题,但我不能允许修改,因为我也需要访问需要SSL的其他地址。
我还测试了其他https
地址,但结果相同
在互联网上搜索我找到了更新curl的解决方案,但我不确定这是否是我的解决方案,因为代码上周正确执行了https请求。无论如何我离开这里我服务器上的curl --version
响应:
curl 7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps scp sftp
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz
有没有办法测试,实际上是卷曲问题?这将有助于我了解如何找到解决方案。
答案 0 :(得分:0)
我认为这是Google升级而不是$this->data['icon'] = $server . 'image/' . $this->config->get('config_icon');
$this->data['logo'] = $server . 'image/' . $this->config->get('config_logo');
问题。
Firebase云消息传递(FCM)是GCM的新版本。它继承了可靠且可扩展的GCM基础架构以及新功能!请参阅常见问题以了解更多信息如果要在新应用程序中集成消息传递,请从FCM开始。强烈建议GCM用户升级到FCM,以便从当前和未来的新FCM功能中受益。 GCM连接服务器参考 HTTP协议 XMPP协议 Android API参考 iOS API参考 Chrome API参考 内容 下游消息语法 下游HTTP消息(JSON) 通知有效负载支持 下游HTTP消息(纯文本) 解释下游消息响应 下游消息错误响应代码
检查https://developers.google.com/cloud-messaging/http-server-ref
答案 1 :(得分:0)
回顾问题并在Openshift中比较我的不同应用程序我意识到https地址中的curl在其中一个中起作用。我使用 phpinfo()检查了差异,发现与服务器指示的相反,在出现问题的应用程序中,SSL版本为3.18.1而不是3.27.1。
解决方案:在openshift中重启应用程序,如果不起作用,请手动更新curl。 (重新开始工作)