PHP程序员站--PHP编程开发平台
 当前位置:主页 >> PHP高级编程 >> 开发技巧 >> 

封装好的CURL和Fsockopen函数

封装好的CURL和Fsockopen函数

来源:PHP程序员站  作者:PHP程序员站  发布时间:2011-06-16
一个封装好的curl和fscokopen函数, CURL: 以下为引用的内容: //CURL /** * 使用: * echo cevin_http_open('http://www.baidu.com'); * * POST数据 * $post = array('aa'='ddd','ee'='d') * 或 * $post = 'aa=dddee=d'; * echo cevin_http_open('http://www.baidu.com

一个封装好的curl和fscokopen函数,

CURL:

以下为引用的内容:
//CURL     
/**   
* 使用:   
* echo cevin_http_open('http://www.baidu.com');   
*   
* POST数据   
* $post = array('aa'=>'ddd','ee'=>'d')   
* 或   
* $post = 'aa=ddd&ee=d';   
* echo cevin_http_open('http://www.baidu.com',array('post'=>$post));   
*/    
function cevin_http_open($url, $conf = array())     


{     
    if(!function_exists('curl_init') or !is_array($conf))  return FALSE;     
    
    $post = '';     
    $purl = parse_url($url);     
    
    $arr = array(     
        'post' => FALSE,     
        'return' => TRUE,     
        'cookie' => 'C:/cookie.txt',);     
    $arr = array_merge($arr, $conf);     
    $ch = curl_init();     
    
    if($purl['scheme'] == 'https')     
    {     
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);     
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);     
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);     
    }     
    
    curl_setopt($ch, CURLOPT_URL, $url);     
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, $arr['return']);     
    curl_setopt($ch, CURLOPT_COOKIEJAR, $arr['cookie']);     
    curl_setopt($ch, CURLOPT_COOKIEFILE, $arr['cookie']);     
    
    if($arr['post'] != FALSE)     

    {     
        curl_setopt($ch, CURL_POST, TRUE);     
        if(is_array($arr['post']))     
        {     
            $post = http_build_query($arr['post']);     
        } else {     
            $post = $arr['post'];     
        }     
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);     
    }     
    
    $result = curl_exec($ch);     

    curl_close($ch);     
    
    return $result;     
}   

 

Fsockopen:

以下为引用的内容:
//Fsockopen     
/**   
*使用方法同CURL   
*/    
function sw_http_open($url, $conf = array()) {     
    $return = '';     
    if(!is_array($conf))     
    {     
        return $return;     
    }     


    $matches = parse_url($url);     
    !isset($matches['host']) && $matches['host'] = '';     
    !isset($matches['path']) && $matches['path'] = '';     
    !isset($matches['query']) && $matches['query'] = '';     
    !isset($matches['port']) && $matches['port'] = '';     
    $host = $matches['host'];     
    $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';     
    $port = !emptyempty($matches['port']) ? $matches['port'] : 80;     
    
    $conf_arr = array(     
        'limit'=>0,     
        'post'=>'',     
        'cookie'=>'',     
        'bysocket'=>FALSE,     
        'ip'=>'',     
        'timeout'=>15,     
        'block'=>TRUE,     
        );     
    
    foreach (array_merge($conf_arr, $conf) as $k=>$v) ${$k} = $v;     
    
    if($post) {     
        if(is_array($post))     
        {     
            $post = http_build_query($post);     
        }     
        $out = "POST $path HTTP/1.0\r\n";     
        $out .= "Accept: */*\r\n";     
        //$out .= "Referer: $boardurl\r\n";     
        $out .= "Accept-Language: zh-cn\r\n";     
        $out .= "Content-Type: application/x-www-form-urlencoded\r\n";     
        $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";     
        $out .= "Host: $host\r\n";     

        $out .= 'Content-Length: '.strlen($post)."\r\n";     
        $out .= "Connection: Close\r\n";     
        $out .= "Cache-Control: no-cache\r\n";     
        $out .= "Cookie: $cookie\r\n\r\n";     
        $out .= $post;     
    } else {     
        $out = "GET $path HTTP/1.0\r\n";     
        $out .= "Accept: */*\r\n";     
        //$out .= "Referer: $boardurl\r\n";     


        $out .= "Accept-Language: zh-cn\r\n";     
        $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";     
        $out .= "Host: $host\r\n";     
        $out .= "Connection: Close\r\n";     
        $out .= "Cookie: $cookie\r\n\r\n";     
    }     
    $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);     
    if(!$fp) {     
        return '';     
    } else {     
        stream_set_blocking($fp, $block);     
        stream_set_timeout($fp, $timeout);     
        @fwrite($fp, $out);     
        $status = stream_get_meta_data($fp);     
        if(!$status['timed_out']) {     
            while (!feof($fp)) {     
                if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n")) {     
                    break;     


                }     
            }     
    
            $stop = false;     
            while(!feof($fp) && !$stop) {     
                $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));     
                $return .= $data;     
                if($limit) {     
                    $limit -= strlen($data);     
                    $stop = $limit <= 0;     
                }     
            }     
        }     
        @fclose($fp);     
        return $return;     
    }     
}    


延伸阅读:
php curl函数参考
file_get_contents和curl函数用法
php中使用curl或fsockopen下载远程文件
PHP采集之CURL函数库
php利用curl函数抓取https的内容
PHP中的CURL函数库
php开启curl方法
PHP curl实现get、post和cookie提交实例讲解
PHP CURL中传递cookie的方法
php如何开启curl模块
开启PHP的CURL扩展来支持curl_init函数运行

Tags: 封装   curl   fsockopen  
最新文章
推荐阅读
月点击排行榜
PHP程序员站 Copyright © 2007-2010,PHPERZ.COM All Rights Reserved 粤ICP备07503606号