Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

转:封装好的CURL和Fsockopen函数,分享

Posted on 2009-10-12 18:49  analyzer  阅读(761)  评论(0编辑  收藏  举报
PHP代码
  1. //CURL   
  2. /**  
  3. * 使用:  
  4. * echo cevin_http_open('http://www.baidu.com');  
  5.  
  6. * POST数据  
  7. * $post = array('aa'=>'ddd','ee'=>'d')  
  8. * 或  
  9. * $post = 'aa=ddd&ee=d';  
  10. * echo cevin_http_open('http://www.baidu.com',array('post'=>$post));  
  11. */  
  12. function cevin_http_open($url$conf = array())   
  13. {   
  14.     if(!function_exists('curl_init'or !is_array($conf))  return FALSE;   
  15.   
  16.     $post = '';   
  17.     $purl = parse_url($url);   
  18.   
  19.     $arr = array(   
  20.         'post' => FALSE,   
  21.         'return' => TRUE,   
  22.         'cookie' => 'C:/cookie.txt',);   
  23.     $arr = array_merge($arr$conf);   
  24.     $ch = curl_init();   
  25.   
  26.     if($purl['scheme'] == 'https')   
  27.     {   
  28.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);   
  29.         curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);   
  30.         curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);   
  31.     }   
  32.   
  33.     curl_setopt($ch, CURLOPT_URL, $url);   
  34.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, $arr['return']);   
  35.     curl_setopt($ch, CURLOPT_COOKIEJAR, $arr['cookie']);   
  36.     curl_setopt($ch, CURLOPT_COOKIEFILE, $arr['cookie']);   
  37.   
  38.     if($arr['post'] != FALSE)   
  39.     {   
  40.         curl_setopt($ch, CURL_POST, TRUE);   
  41.         if(is_array($arr['post']))   
  42.         {   
  43.             $post = http_build_query($arr['post']);   
  44.         } else {   
  45.             $post = $arr['post'];   
  46.         }   
  47.         curl_setopt($ch, CURLOPT_POSTFIELDS, $post);   
  48.     }   
  49.   
  50.     $result = curl_exec($ch);   
  51.     curl_close($ch);   
  52.   
  53.     return $result;   
  54. }  
PHP代码
  1.   
  2. //Fsockopen   
  3. /**  
  4. *使用方法同CURL  
  5. */  
  6. function sw_http_open($url$conf = array()) {   
  7.     $return = '';   
  8.     if(!is_array($conf))   
  9.     {   
  10.         return $return;   
  11.     }   
  12.     $matches = parse_url($url);   
  13.     !isset($matches['host']) && $matches['host'] = '';   
  14.     !isset($matches['path']) && $matches['path'] = '';   
  15.     !isset($matches['query']) && $matches['query'] = '';   
  16.     !isset($matches['port']) && $matches['port'] = '';   
  17.     $host = $matches['host'];   
  18.     $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';   
  19.     $port = !emptyempty($matches['port']) ? $matches['port'] : 80;   
  20.   
  21.     $conf_arr = array(   
  22.         'limit'=>0,   
  23.         'post'=>'',   
  24.         'cookie'=>'',   
  25.         'bysocket'=>FALSE,   
  26.         'ip'=>'',   
  27.         'timeout'=>15,   
  28.         'block'=>TRUE,   
  29.         );   
  30.   
  31.     foreach (array_merge($conf_arr$confas $k=>$v) ${$k} = $v;   
  32.   
  33.     if($post) {   
  34.         if(is_array($post))   
  35.         {   
  36.             $post = http_build_query($post);   
  37.         }   
  38.         $out = "POST $path HTTP/1.0\r\n";   
  39.         $out .= "Accept: */*\r\n";   
  40.         //$out .= "Referer: $boardurl\r\n";   
  41.         $out .= "Accept-Language: zh-cn\r\n";   
  42.         $out .= "Content-Type: application/x-www-form-urlencoded\r\n";   
  43.         $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";   
  44.         $out .= "Host: $host\r\n";   
  45.         $out .= 'Content-Length: '.strlen($post)."\r\n";   
  46.         $out .= "Connection: Close\r\n";   
  47.         $out .= "Cache-Control: no-cache\r\n";   
  48.         $out .= "Cookie: $cookie\r\n\r\n";   
  49.         $out .= $post;   
  50.     } else {   
  51.         $out = "GET $path HTTP/1.0\r\n";   
  52.         $out .= "Accept: */*\r\n";   
  53.         //$out .= "Referer: $boardurl\r\n";   
  54.         $out .= "Accept-Language: zh-cn\r\n";   
  55.         $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";   
  56.         $out .= "Host: $host\r\n";   
  57.         $out .= "Connection: Close\r\n";   
  58.         $out .= "Cookie: $cookie\r\n\r\n";   
  59.     }   
  60.     $fp = @fsockopen(($ip ? $ip : $host), $port$errno$errstr$timeout);   
  61.     if(!$fp) {   
  62.         return '';   
  63.     } else {   
  64.         stream_set_blocking($fp$block);   
  65.         stream_set_timeout($fp$timeout);   
  66.         @fwrite($fp$out);   
  67.         $status = stream_get_meta_data($fp);   
  68.         if(!$status['timed_out']) {   
  69.             while (!feof($fp)) {   
  70.                 if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n")) {   
  71.                     break;   
  72.                 }   
  73.             }   
  74.   
  75.             $stop = false;   
  76.             while(!feof($fp) && !$stop) {   
  77.                 $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));   
  78.                 $return .= $data;   
  79.                 if($limit) {   
  80.                     $limit -= strlen($data);   
  81.                     $stop = $limit <= 0;   
  82.                 }   
  83.             }   
  84.         }   
  85.         @fclose($fp);   
  86.         return $return;   
  87.     }   
  88. }   
我要啦免费统计