PHP POST提交的四种方法

转载自:http://www.oschina.net/code/snippet72951633065

第四种方法转载自:http://blog.sina.com.cn/s/blog_8155e74d0101gunl.html


class Request{
    public function curlPost($url = '', $postData = '', $options = array())
    {
        if (is_array($postData)) {
            $postData = http_build_query($postData);
        }
        $ch = curl_init();
        $this_header = array("content-type: application/x-www-form-urlencoded; charset=UTF-8");
        curl_setopt($ch,CURLOPT_HTTPHEADER,$this_header);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
        curl_setopt($ch, CURLOPT_TIMEOUT, 5); //设置cURL允许执行的最长秒数
        if (!empty($options)) {
            curl_setopt_array($ch, $options);
        }
        //https请求 不验证证书和host
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }

    public static function post2($url, $data){//file_get_content
        $postdata = http_build_query(
            $data
        );
        $opts = array('http' =>
            array(
                'method'  => 'POST',
                'header'  => 'Content-type: application/x-www-form-urlencoded',
                'content' => $postdata
            )
        );
        $context = stream_context_create($opts);
        $result = file_get_contents($url, false, $context);
        return $result;
    }

    public static function post3($host,$path,$query,$others=''){//fsocket
        $post="POST $path HTTP/1.1\r\nHost: $host\r\n";
        $post.="Content-type: application/x-www-form-";
        $post.="urlencoded\r\n${others}";
        $post.="User-Agent: Mozilla 4.0\r\nContent-length: ";
        $post.=strlen($query)."\r\nConnection: close\r\n\r\n$query";
        $h=fsockopen($host,80);
        fwrite($h,$post);
        for($a=0,$r='';!$a;){
            $b=fread($h,8192);
            $r.=$b;
            $a=(($b=='')?1:0);
        }
        fclose($h);
        return $r;
    }

    // 发送post请求
    // @param string $url 请求地址
    // @param array $post_data post键值对数据
    // @return string
    public function post4($url, $post_data){

        // http_build_query()
        // 生成URL-encode之后的请求字符串
        //
        // 备注:
        // php5.3的分隔符用的是&,如果目标服务器也是php5.3,那么就不会出错。
        // 但是如果目标服务器是java的tomcat或者别的,那么&可能就会处理错误。
        // 以下的形式能够避免错误
        // http_build_query($post_data, '', '&');

        // stream_context_create()
        // 创建并返回一个流的资源

        //$username='username';
        //$password='password';
        $postData = http_build_query($post_data, '', '&');
        $options = array(
            'http' =>array(
                'method'=>"POST",
                'header'=>"Accept-language: en\r\n".
                    "Content-type: application/x-www-form-urlencoded;Charset=utf-8\r\n",
                'content' => $postData,
                'timeout' => 15 * 60,//超时时间(单位:s)
            )
        );
        //创建并返回一个流的资源
        $context = stream_context_create($options);
        $result = file_get_contents($url, false, $context);

        return $result;
    }
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注