PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

最近在研究微信开发,当中PHP处理处理接口最经常用的一个函数是 curl_setopt()以下的文章很优秀,很详细,感谢博主的无私奉献!
转载于:http://blog.csdn.net/liuxinmingcode/article/details/8043150

通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便大笑),curl_setopt 是PHP的一个扩展库

使用条件:需要在php.ini 中配置开启。(PHP 4 >= 4.0.2)
//取消下面的注释

extension=php_curl.dll

在Linux下面,需要重新编译PHP了,编译时,你需要打开编译参数——在configure命令上加上“–with-curl” 参数。

1、 一个抓取网页的简单案例:

[php] view plain copy
print?

// 创建一个新cURL资源  
$ch = curl_init();  

// 设置URL和相应的选项  
curl_setopt($ch, CURLOPT_URL, "http://www.baidu.com/");  
curl_setopt($ch, CURLOPT_HEADER, false);  

// 抓取URL并把它传递给浏览器  
curl_exec($ch);  

//关闭cURL资源,并且释放系统资源  
curl_close($ch);  

2、POST数据案例:

[php] view plain copy
print?

// 创建一个新cURL资源  
$ch = curl_init();  
$data = 'phone='. urlencode($phone);  
// 设置URL和相应的选项  
curl_setopt($ch, CURLOPT_URL, "http://www.post.com/");  
curl_setopt($ch, CURLOPT_POST, 1);  
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);  
// 抓取URL并把它传递给浏览器  
curl_exec($ch);  

//关闭cURL资源,并且释放系统资源  
curl_close($ch);  

3、关于SSL和Cookie

关于SSL也就是HTTPS协议,你只需要把CURLOPT_URL连接中的http://变成https://就可以了。当然,还有一个参数叫CURLOPT_SSL_VERIFYHOST可以设置为验证站点。
关于Cookie,你需要了解下面三个参数:
CURLOPT_COOKIE,在当面的会话中设置一个cookie
CURLOPT_COOKIEJAR,当会话结束的时候保存一个Cookie
CURLOPT_COOKIEFILE,Cookie的文件。

PS:新浪微博登陆API部分截取(部分我增加了点注释,全当参数翻译下。哈哈) 有兴趣的自己研究,自己挪为己用。嘿嘿

/** 
     * Make an HTTP request 
     * 
     * @return string API results 
     * @ignore 
     */  
    function http($url, $method, $postfields = NULL, $headers = array()) {  
        $this->http_info = array();  
        $ci = curl_init();  
        /* Curl settings */  
        curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);//让cURL自己判断使用哪个版本  
        curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent);//在HTTP请求中包含一个"User-Agent: "头的字符串。  
        curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout);//在发起连接前等待的时间,如果设置为0,则无限等待  
        curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout);//设置cURL允许执行的最长秒数  
        curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE);//返回原生的(Raw)输出  
        curl_setopt($ci, CURLOPT_ENCODING, "");//HTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。  
        curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer);//禁用后cURL将终止从服务端进行验证  
        curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader'));//第一个是cURL的资源句柄,第二个是输出的header数据  
        curl_setopt($ci, CURLOPT_HEADER, FALSE);//启用时会将头文件的信息作为数据流输出  

        switch ($method) {  
            case 'POST':  
                curl_setopt($ci, CURLOPT_POST, TRUE);  
                if (!empty($postfields)) {  
                    curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);  
                    $this->postdata = $postfields;  
                }  
                break;  
            case 'DELETE':  
                curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');  
                if (!empty($postfields)) {  
                    $url = "{$url}?{$postfields}";  
                }  
        }  

        if ( isset($this->access_token) && $this->access_token )  
            $headers[] = "Authorization: OAuth2 ".$this->access_token;  

        $headers[] = "API-RemoteIP: " . $_SERVER['REMOTE_ADDR'];  
        curl_setopt($ci, CURLOPT_URL, $url );  
        curl_setopt($ci, CURLOPT_HTTPHEADER, $headers );  
        curl_setopt($ci, CURLINFO_HEADER_OUT, TRUE );  

        $response = curl_exec($ci);  
        $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);  
        $this->http_info = array_merge($this->http_info, curl_getinfo($ci));  
        $this->url = $url;  

        if ($this->debug) {  
            echo "=====post data======\r\n";  
            var_dump($postfields);  

            echo '=====info====='."\r\n";  
            print_r( curl_getinfo($ci) );  

            echo '=====$response====='."\r\n";  
            print_r( $response );  
        }  
        curl_close ($ci);  
        return $response;  
    }  

更详细的参数说明参考:http://cn2.php.net/curl_setopt

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值