PHP CURL突然停止处理https请求

时间:2017-04-24 06:23:33

标签: php curl openshift

直到几天前,一切都进展顺利,但现在,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

有没有办法测试,实际上是卷曲问题?这将有助于我了解如何找到解决方案。

2 个答案:

答案 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。 (重新开始工作)