curl错误代码6:无法解析主机:数组

时间:2016-03-05 17:25:03

标签: php android curl

我正在尝试使用第三方服务器实施Android推送通知。 我有一个PHP脚本,其中包含一些CURL命令。 当我执行代码时,它给了我错误: "无法解析主机:数组" 在这里,我向主机网站确认他们已经激活了curl实现,并且工作正常。所以我的代码似乎有问题。 我是一个比较新的php和curl脚本。请帮忙。 以下是我正在使用的代码

这里我想要覆盖的网址是: http://android.googleapis.com/gcm/send

注意:(此处我尝试在上面的网址中同时使用http和https,但问题仍然存在。)

卷曲代码:

private function useCurl(&$model, $url, $headers, $fields = null) {
            // Open connection
            echo "::::::Inside CURL Function:::::::";
            $ch = curl_init();
            echo '::::::::::value of variable $ch:::::::::::' . $ch;
            if ($url) {
                // Set the url, number of POST vars, POST data
                echo "::::::::Start of setting CURL Variables:::::::";    
                curl_setopt($ch, CURLOPT_URL, $url);
                curl_setopt($ch, CURLOPT_POST, true);
                curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
                curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
                echo ":::::::::End of setting CURL Variables::::::::";
                // Disabling SSL Certificate support temporarly
                echo "::::::::Start of disabling SSL Certificates::::::::";
                curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                if ($fields) {
                    curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
                }
                echo "::::::::End of disabling SSL Certificates:::::::::";
                // Execute post
                echo ":::::::::Start of executing post request::::::::";
                $result = curl_exec($ch);
                echo ":::::::::End of executing post request:::::::::::";
                if ($result === FALSE) {
                    die('Curl failed: ' . curl_error($ch) . curl_errno($ch));
                }

                // Close connection
                curl_close($ch);

                return $result;
        }
    }

3 个答案:

答案 0 :(得分:1)

解决了这个问题。这是正确的工作代码:

    public static function android($data, $reg_id) {
                $url = 'https://android.googleapis.com/gcm/send';
                //echo '::::::::::::URL Variable::::::::' . $url;
json_encode($reg_id);
                $message = array(
                    'title' => $data['mtitle'],
                    'message' => $data['mdesc'],
                    'subtitle' => '',
                    'tickerText' => '',
                    'msgcnt' => 1,
                    'vibrate' => 1
                );
                $headers = array(
                    'Authorization:key=' .self::$API_ACCESS_KEY,
                    'Content-Type:application/json'


                );

                $fields = array(
                    'registration_ids' => $reg_id,
                    'data' => $message
                );

                    $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);
                    if ($fields) {
                        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
                    }


                        $result = curl_exec($ch);
                        // Close connection
                    curl_close($ch);

                        echo "::::::::::value of $result variable:::::::::::" . $result; 

            }

在这里,确保将$ reg_id和$ data作为php数组传递给函数。 该线程可以关闭。

答案 1 :(得分:0)

我收到了错误。我的代码有两个功能 1.准备有效载荷和所需数据

  1. 调用CURL函数
  2. 以下是准备功能的代码

    // Sends Push notification for Android users
        public function android($data, $reg_id) {
            echo "Inside pushnotification for Android Function::::::::";
                $url = 'http://android.googleapis.com/gcm/send';
                echo '::::::::::::URL Variable::::::::' . $url;
                $message = array(
                    'title' => $data['mtitle'],
                    'message' => $data['mdesc'],
                    'subtitle' => '',
                    'tickerText' => '',
                    'msgcnt' => 1,
                    'vibrate' => 1
                );
                echo ':::::::::::::message Variable::::::::' . $message;
                $headers = array(
                    'Authorization: key=' .self::$API_ACCESS_KEY,
                    'Content-Type: application/json'
                );
                echo ':::::::::::::headers Variable::::::::' . $headers;
    
                $fields = array(
                    'registration_ids' => array($reg_id),
                    'data' => $message,
                );
                echo '::::::::::fields Variable::::::::' . $fields;
                echo ':::::::::::::Start of CURL Call::::::::';
                //return $this->useCurl($url, $headers, json_encode($fields));
                return self::useCurl($url, json_encode($headers), json_encode($fields));
            }
    
    1. CURL函数

      //卷曲 私有函数useCurl($ url,$ headers,$ fields){         //打开连接         echo" ::::::里面的CURL函数:::::::&#34 ;;         $ ch = curl_init();         echo' ::::::::::变量值$ ch :::::::::::' 。 $ CH;         if($ url){             //设置网址,POST数量,POST数据             echo" ::::::::开始设置CURL变量:::::::&#34 ;;             echo' ::::::::变量$ url的价值:::::::' 。 $网址;
                  echo' ::::::::变量$ headers的价值:::::::' 。 $头;             echo' ::::::::变量$ model的价值:::::::' 。 $模型;             echo' ::::::::变量$ fields的值:::::::' 。 $领域;
                  curl_setopt($ ch,CURLOPT_URL,$ url);             curl_setopt($ ch,CURLOPT_POST,true);             curl_setopt($ ch,CURLOPT_HTTPHEADER,$ headers);             curl_setopt($ ch,CURLOPT_RETURNTRANSFER,true);             echo" :::::::::设置CURL变量的结束::::::::&#34 ;;             //暂时禁用SSL证书支持             echo" ::::::::开始禁用SSL证书::::::::&#34 ;;             curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,false);             if($ fields){                 curl_setopt($ ch,CURLOPT_POSTFIELDS,$ fields);             }             echo" ::::::::禁用SSL证书的结束:::::::::&#34 ;;             //执行帖子             echo" :::::::::开始执行post request ::::::::&#34 ;;             $ result = curl_exec($ ch);             echo" :::::::::执行邮件请求的结束:::::::::::&#34 ;;             if($ result === FALSE){                 死('卷曲失败:' .curl_error($ ch).curl_errno($ ch));             }

              // Close connection
              curl_close($ch);
      
              return $result;
      }
      

      }

    2. 两者都是纠正的功能

      以下是更正:

      1. 在第一个功能中 旧价值:

        return self :: useCurl($ url,$ headers,json_encode($ fields));

      2. 新价值:

        return self::useCurl($url, json_encode($headers), json_encode($fields));
        

        原因:由于$ headers是一个数组,因此应使用json_encode将其转换为JSON字符串。这解决了我在帖子中的第一个错误。

        1. 在第二个功能
        2. 旧价值:

          useCurl(&$model, $url, $headers, $fields = null)
          

          新价值:

          useCurl($url, $headers, $fields)
          

          原因:这解决了我的第二个错误,因为没有名为$ model的变量,然后调用函数中的url值在$ model中传递,同样也传递给其他人。

          现在,代码中没有错误。但尚未收到通知。 我怀疑$ headers字符串中存在错误,因为它在我的API访问密钥前面连接了一些额外的值。一旦我能够解决,我会尝试回归。

答案 2 :(得分:0)

这是代码抛出错误=从gcm缺少注册。

public static function android($data, $reg_id) {
    echo "Inside pushnotification for Android Function::::::::";
        $url = 'https://android.googleapis.com/gcm/send';
        //echo '::::::::::::URL Variable::::::::' . $url;
        echo '::::::::::::data Variable::::::::' . json_encode($data);
        echo '::::::::::::regid Variable::::::::' . json_encode($reg_id);
        $message = array(
            'title' => $data['mtitle'],
            'message' => $data['mdesc'],
            'subtitle' => '',
            'tickerText' => '',
            'msgcnt' => 1,
            'vibrate' => 1
        );
        echo ':::::::::::::message Variable::::::::' . json_encode($message);
        $headers = array(
            'Authorization:key=' .self::$API_ACCESS_KEY,
            'Content-Type:application/json'


        );
        echo ':::::::::::::headers Variable::::::::' . json_encode($headers);

        $fields = array(
            'registration_ids' => $reg_id,
            'data' => $message
        );
        echo '::::::::::fields Variable::::::::' . json_encode($fields);
        echo ':::::::::::::Start of CURL Call::::::::';
        //return $this->useCurl($url, $headers, json_encode($fields));
        //return self::useCurl($url, json_encode($headers), json_encode($fields));

            $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);
            if ($fields) {
                curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
            }


                $result = curl_exec($ch);
                // Close connection
            curl_close($ch);

                echo "::::::::::value of $result variable:::::::::::" . $result; 

    }