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 相关文章推荐
基于mysql的bbs设计(二)
Oct 09 PHP
发布一个用PHP fsockopen写的HTTP下载的类
Feb 22 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
php获取textarea的值并处理回车换行的方法
Oct 20 PHP
php之curl实现http与https请求的方法
Oct 21 PHP
PHP获取数组最后一个值的2种方法
Jan 21 PHP
PHP中模拟链表和链表的基本操作示例
Feb 27 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
Apr 07 PHP
php及codeigniter使用session-cookie的方法(详解)
Apr 06 PHP
Laravel框架实现model层的增删改查(CURD)操作示例
May 12 PHP
laravel框架中控制器的创建和使用方法分析
Nov 23 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
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
thinkphp实现多语言功能(语言包)
2014/03/04 PHP
php中删除数组的第一个元素和最后一个元素的函数
2015/03/07 PHP
WordPress中注册菜单与调用菜单的方法详解
2015/12/18 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
xmlHTTP实例
2006/10/24 Javascript
js自带函数备忘 数组
2006/12/29 Javascript
jquery简单体验
2007/01/10 Javascript
JS(JQuery)操作Array的相关方法介绍
2014/02/11 Javascript
Jquery api 速查表分享
2015/01/12 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
如何实现星星评价(jquery.raty.js插件)
2016/12/21 Javascript
layer弹窗插件操作方法详解
2017/05/19 Javascript
React组件生命周期详解
2017/07/03 Javascript
使用JavaScript开发跨平台的桌面应用详解
2017/07/27 Javascript
详谈ES6中的迭代器(Iterator)和生成器(Generator)
2017/07/31 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
Vue.js组件通信的几种姿势
2017/10/23 Javascript
vue-router配合ElementUI实现导航的实例
2018/02/11 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
python selenium 获取标签的属性值、内容、状态方法
2018/06/22 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
Python代码太长换行的实现
2019/07/05 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
2014年除四害工作总结
2014/12/06 职场文书
岗位职责范本大全
2015/02/26 职场文书
校本培训个人总结
2015/02/28 职场文书
安全教育培训制度
2015/08/06 职场文书
2016年助残日旅游活动总结
2016/04/01 职场文书
私人贷款担保书该怎么写呢?
2019/07/02 职场文书
Python实战之疫苗研发情况可视化
2021/05/18 Python
Python实现照片卡通化
2021/12/06 Python
实例详解Python的进程,线程和协程
2022/03/13 Python