PHP下打开URL地址的几种方法小结


Posted in PHP onMay 16, 2010

1: 用file_get_contents 以get方式获取内容

<?php 
$url='http://www.baidu.com/'; 
$html = file_get_contents($url); 
//print_r($http_response_header); 
ec($html); 
printhr(); 
printarr($http_response_header); 
printhr(); 
?>

示例代码2: 用fopen打开url, 以get方式获取内容
<? 
$fp = fopen($url, 'r'); 
printarr(stream_get_meta_data($fp)); 
printhr(); 
while(!feof($fp)) { 
$result .= fgets($fp, 1024); 
} 
echo "url body: $result"; 
printhr(); 
fclose($fp); 
?>

示例代码3:用file_get_contents函数,以post方式获取url
<?php 
$data = array ('foo' => 'bar'); 
$data = http_build_query($data); 
$opts = array ( 
'http' => array ( 
'method' => 'POST', 
'header'=> "Content-type: application/x-www-form-urlencoded" . 
"Content-Length: " . strlen($data) . "", 
'content' => $data 
), 
); 
$context = stream_context_create($opts); 
$html = file_get_contents('http://localhost/e/admin/test.html', false, $context); 
echo $html; 
?>

示例代码4:用fsockopen函数打开url,以get方式获取完整的数据,包括header和body
<? 
function get_url ($url,$cookie=false) { 
$url = parse_url($url); 
$query = $url[path]."?".$url[query]; 
ec("Query:".$query); 
$fp = fsockopen( $url[host], $url[port]?$url[port]:80 , $errno, $errstr, 30); 
if (!$fp) { 
return false; 
} else { 
$request = "GET $query HTTP/1.1"; 
$request .= "Host: $url[host]"; 
$request .= "Connection: Close"; 
if($cookie) $request.="Cookie: $cookie\n"; 
$request.=""; 
fwrite($fp,$request); 
while(!@feof($fp)) { 
$result .= @fgets($fp, 1024); 
} 
fclose($fp); 
return $result; 
} 
} 
//获取url的html部分,去掉header 
function GetUrlHTML($url,$cookie=false) { 
$rowdata = get_url($url,$cookie); 
if($rowdata) 
{ 
$body= stristr($rowdata,""); 
$body=substr($body,4,strlen($body)); 
return $body; 
} 
return false; 
} ?>

示例代码5:用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body
<? 
function HTTP_Post($URL,$data,$cookie, $referrer="") { 
// parsing the given URL 
$URL_Info=parse_url($URL); 
// Building referrer 
if($referrer=="") // if not given use this script as referrer 
$referrer="111"; 
// making string from $data 
foreach($data as $key=>$value) 
$values[]="$key=".urlencode($value); 
$data_string=implode("&",$values); 
// Find out which port is needed - if not given use standard (=80) 
if(!isset($URL_Info["port"])) 
$URL_Info["port"]=80; 
// building POST-request: 
$request.="POST ".$URL_Info["path"]." HTTP/1.1\n"; 
$request.="Host: ".$URL_Info["host"]."\n"; 
$request.="Referer: $referer\n"; 
$request.="Content-type: application/x-www-form-urlencoded\n"; 
$request.="Content-length: ".strlen($data_string)."\n"; 
$request.="Connection: close\n"; 
$request.="Cookie: $cookie\n"; 
$request.="\n"; 
$request.=$data_string."\n"; 
$fp = fsockopen($URL_Info["host"],$URL_Info["port"]); 
fputs($fp, $request); 
while(!feof($fp)) { 
$result .= fgets($fp, 1024); 
} 
fclose($fp); 
return $result; 
} 
printhr(); 
?>

示例代码6:使用curl库,使用curl库之前,你可能需要查看一下php.ini,查看是否已经打开了curl扩展
<? 
$ch = curl_init(); 
$timeout = 5; 
curl_setopt ($ch, CURLOPT_URL, 'http://www.baidu.com/'); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
$file_contents = curl_exec($ch); 
curl_close($ch); 
echo $file_contents; 
?>

关于curl库:
curl官方网站http://curl.haxx.se/
curl 是使用URL语法的传送文件工具,支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL证书、HTTP POST、HTTP PUT 、FTP 上传,kerberos、基于HTT格式的上传、代理、cookie、用户+口令证明、文件传送恢复、http代理通道和大量其他有用的技巧
<? 
function printarr(array $arr) 
{ 
echo "<br> Row field count: ".count($arr)."<br>"; 
foreach($arr as $key=>$value) 
{ 
echo "$key=$value <br>"; 
} 
} 
?>

7.
有些主机服务商把php的allow_url_fopen选项是关闭了,就是没法直接使用file_get_contents来获取远程web页面的内容。那就是可以使用另外一个函数curl。
下面是file_get_contents和curl两个函数同样功能的不同写法
file_get_contents函数的使用示例:
< ?php 
$file_contents = file_get_contents('http://www.ccvita.com/'); 
echo $file_contents; 
?>

换成curl函数的使用示例:
< ?php 
$ch = curl_init(); 
$timeout = 5; 
curl_setopt ($ch, CURLOPT_URL, 'http://www.ccvita.com'); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
$file_contents = curl_exec($ch); 
curl_close($ch); 
echo $file_contents; 
?>

利用function_exists函数来判断php是否支持一个函数可以轻松写出下面函数
< ?php 
function vita_get_url_content($url) { 
if(function_exists('file_get_contents')) { 
$file_contents = file_get_contents($url); 
} else { 
$ch = curl_init(); 
$timeout = 5; 
curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 
$file_contents = curl_exec($ch); 
curl_close($ch); 
} 
return $file_contents; 
} 
?>

其实上面的这个函数还有待商榷,如果你的主机服务商把file_get_contents和curl都关闭了,上面的函数就会出现错误。
PHP 相关文章推荐
PHP实现定时生成HTML网站首页实例代码
Nov 20 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
php数组函数序列 之shuffle()和array_rand() 随机函数使用介绍
Oct 29 PHP
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
May 07 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
Dec 16 PHP
php字符串函数学习之strstr()
Mar 27 PHP
php无法连接mysql数据库的正确解决方法
Jul 01 PHP
php利用嵌套数组拼接与解析json的方法
Feb 07 PHP
php实现的redis缓存类定义与使用方法示例
Aug 09 PHP
让PHP支持断点续传的源码
May 16 #PHP
php 获取一个月第一天与最后一天的代码
May 16 #PHP
PHP 缓存实现代码及详细注释
May 16 #PHP
PHP 防恶意刷新实现代码
May 16 #PHP
PHP 全角转半角实现代码
May 16 #PHP
php5.3 废弃函数小结
May 16 #PHP
memcached 和 mysql 主从环境下php开发代码详解
May 16 #PHP
You might like
PHP 文本文章分页代码 按标记或长度(不涉及数据库)
2012/06/07 PHP
PHP浮点数的一个常见问题
2016/03/10 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
jquery checkbox实现单选小例
2013/11/27 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
node.js实现快速截图
2016/08/27 Javascript
vue2.0实现分页组件的实例代码
2017/06/22 Javascript
简单实现js轮播图效果
2017/07/14 Javascript
浅谈React Native 中组件的生命周期
2017/09/08 Javascript
javascript实现评分功能
2020/06/24 Javascript
使用vue引入maptalks地图及聚合效果的实现
2020/08/10 Javascript
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
详解Python中的type()方法的使用
2015/05/21 Python
python xpath获取页面注释的方法
2019/01/14 Python
Python多线程原理与用法实例剖析
2019/01/22 Python
Python函数的定义方式与函数参数问题实例分析
2019/12/26 Python
python中的列表和元组区别分析
2020/12/30 Python
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
几个判断型的面试题
2012/07/03 面试题
两只小狮子教学反思
2014/02/05 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
《生命 生命》教学反思
2014/04/19 职场文书
美食节目策划方案
2014/05/31 职场文书
个人政风行风自查自纠报告
2014/10/21 职场文书
教师群众路线学习心得体会
2014/11/04 职场文书
大学生自我评价范文
2015/03/03 职场文书
企业承诺书格式范文
2015/04/28 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
同学聚会感言一句话
2015/07/30 职场文书
中秋节主题班会
2015/08/14 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js