`
java-mans
  • 浏览: 11449387 次
文章分类
社区版块
存档分类
最新评论

高手讲解php调用url的N种方法

 
阅读更多
<?php 

$url='http://www.baidu.com/'; 

$html=file_get_contents($url); 

//print_r($http_response_header); 

ec($html); 

printhr(); 

printarr($http_response_header); 

printhr(); 

?> 


示例代码1: 用file_get_contents 以get方式获取内容

示例代码2: 用fopen打开url, 以get方式获取内容

<?php

$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/r/n". 

"Content-Length: ".strlen($data)."/r/n", 

'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

<? 

functionget_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){ 

returnfalse; 

}else{ 

$request="GET$queryHTTP/1.1/r/n"; 

$request.="Host:$url[host]/r/n"; 

$request.="Connection: Close/r/n"; 

if($cookie)$request.="Cookie: $cookie/n"; 

$request.="/r/n"; 

fwrite($fp,$request); 

while(!@feof($fp)){ 

$result.=@fgets($fp,1024); 

} 

fclose($fp); 

return$result; 

} 

} 

//获取url的html部分,去掉header 

functionGetUrlHTML($url,$cookie=false){ 

$rowdata=get_url($url,$cookie); 

if($rowdata) 

{ 

$body=stristr($rowdata,"/r/n/r/n"); 

$body=substr($body,4,strlen($body)); 

return$body; 

} 

returnfalse; 

} 

?> 


示例代码5:用fsockopen函数打开url,以POST方式获取完整的数据,包括header和body

<? 

functionHTTP_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($dataas$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; 

?> 


稍微有点意义的函数是:get_content_by_socket(), get_url(), get_content_url(), get_content_object 几个函数,也许能够给你点什么想法。

<?php

//获取所有内容url保存到文件

function get_index($save_file, $prefix="index_"){

$count = 68;

$i = 1;

if (file_exists($save_file)) @unlink($save_file);

$fp = fopen($save_file, "a+") or die("Open ". $save_file ." failed");

while($i<$count){

$url = $prefix . $i .".htm";

echo "Get ". $url ."...";

$url_str = get_content_url(get_url($url));

echo " OK/n";

fwrite($fp, $url_str);

++$i;

}

fclose($fp);

}

//获取目标多媒体对象

function get_object($url_file, $save_file, $split="|--:**:--|"){

if (!file_exists($url_file)) die($url_file ." not exist");

$file_arr = file($url_file);

if (!is_array($file_arr) || empty($file_arr)) die($url_file ." not content");

$url_arr = array_unique($file_arr);

if (file_exists($save_file)) @unlink($save_file);

$fp = fopen($save_file, "a+") or die("Open save file ". $save_file ." failed");

foreach($url_arr as $url){

if (empty($url)) continue;

echo "Get ". $url ."...";

$html_str = get_url($url);

echo $html_str;

echo $url;

exit;

$obj_str = get_content_object($html_str);

echo " OK/n";

fwrite($fp, $obj_str);

}

fclose($fp);

}

//遍历目录获取文件内容

function get_dir($save_file, $dir){

$dp = opendir($dir);

if (file_exists($save_file)) @unlink($save_file);

$fp = fopen($save_file, "a+") or die("Open save file ". $save_file ." failed");

while(($file = readdir($dp)) != false){

if ($file!="." && $file!=".."){

echo "Read file ". $file ."...";

$file_content = file_get_contents($dir . $file);

$obj_str = get_content_object($file_content);

echo " OK/n";

fwrite($fp, $obj_str);

}

}

fclose($fp);

}

//获取指定url内容

function get_url($url){

$reg = '/^http:////[^//].+$/';

if (!preg_match($reg, $url)) die($url ." invalid");

$fp = fopen($url, "r") or die("Open url: ". $url ." failed.");

while($fc = fread($fp, 8192)){

$content .= $fc;

}

fclose($fp);

if (empty($content)){

die("Get url: ". $url ." content failed.");

}

return $content;

}

//使用socket获取指定网页

function get_content_by_socket($url, $host){

$fp = fsockopen($host, 80) or die("Open ". $url ." failed");

$header = "GET /".$url ." HTTP/1.1/r/n";

$header .= "Accept: */*/r/n";

$header .= "Accept-Language: zh-cn/r/n";

$header .= "Accept-Encoding: gzip, deflate/r/n";

$header .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)/r/n";

$header .= "Host: ". $host ."/r/n";

$header .= "Connection: Keep-Alive/r/n";

//$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-/r/n/r/n";

$header .= "Connection: Close/r/n/r/n";

fwrite($fp, $header);

while (!feof($fp)) {

$contents .= fgets($fp, 8192);

}

fclose($fp);

return $contents;

}

//获取指定内容里的url

function get_content_url($host_url, $file_contents){

//$reg = '/^(#|javascript.*?|ftp:////.+|http:////.+|.*?href.*?|play.*?|index.*?|.*?asp)+$/i';

//$reg = '/^(down.*?/.html|/d+_/d+/.htm.*?)$/i';

$rex = "/([hH][rR][eE][Ff])/s*=/s*['/"]*([^>'/"/s]+)[/"'>]*/s*/i";

$reg = '/^(down.*?/.html)$/i';

preg_match_all ($rex, $file_contents, $r);

$result = ""; //array();

foreach($r as $c){

if (is_array($c)){

foreach($c as $d){

if (preg_match($reg, $d)){ $result .= $host_url . $d."/n"; }

}

}

}

return $result;

}

//获取指定内容中的多媒体文件

function get_content_object($str, $split="|--:**:--|"){

$regx = "/href/s*=/s*['/"]*([^>'/"/s]+)[/"'>]*/s*(<b>.*?<//b>)/i";

preg_match_all($regx, $str, $result);

if (count($result) == 3){

$result[2] = str_replace("<b>多媒体: ", "", $result[2]);

$result[2] = str_replace("</b>", "", $result[2]);

$result = $result[1][0] . $split .$result[2][0] . "/n";

}

return $result;

}

?>

转载一定注明来自:电脑技术分享

分享到:
评论

相关推荐

    史上最全韩顺平传智播客PHP就业班视频,10月份全集

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    史上最全韩顺平传智播客PHP就业班视频,9月份全集

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    (全)传智播客PHP就业班视频完整课程

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    韩顺平PHP JS JQUERY 所有视频下载种子 货真价实

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    史上最全传智播客PHP就业班视频课,8月份视频

    10-26 4 jquery对象集合遍历的四种形式及练习题讲解 jquery的dom操作 10-27 1课程回顾 10-27 2 jquery的dom操作 内部插入 外部插入 10-27 3 jquery节点操作 10-27 4 练习题讲解 10-27 5 jquery属性操作 获取子元素和...

    ecshop二次开发 47个经典插件开发案例 讲解很详细

    十七、刚修改的伪静态分类URL 52 十八、ecshop批发销售 66 十九、网银支付直通插件 实现方法 69 二十、商品列表页多图切换的实现 75 二十一、完善论坛发布的qq登录插件 77 二十二、倒计时代码 78 二十三、关于ecshop...

    ecshop二次开发 47个经典插件开发案例 讲解很详细 学习参考感谢提供者

    十七、刚修改的伪静态分类URL 52 十八、ecshop批发销售 66 十九、网银支付直通插件 实现方法 69 二十、商品列表页多图切换的实现 75 二十一、完善论坛发布的qq登录插件 77 二十二、倒计时代码 78 二十三、关于ecshop...

    8tupian图片加密平台-PHP

    源码是通过调用八图片平台的API,进行设计开发的。用此源码搭建的网站,用户资金直接进入你自己的支付接口。8tupian图片加密平台简介:8tupian图片加密平台是一个可以对图片进行加密的网络平台。将原始图片上传,就...

    PHP3程序设计

    本书作者是一位经验丰富的程序员,在书中使用了大量的、有一定使用价值的例子来深入浅出地讲解PHP语言及Web编程需要了解的方方面面。尤其值得注意的是,书中使用了多个“中场”章节,以便在学习过一定知识之后,通过...

    ecshop二次开发 47个经典插件开发案例 ecshop

    十七、刚修改的伪静态分类URL 52 十八、ecshop批发销售 66 十九、网银支付直通插件 实现方法 69 二十、商品列表页多图切换的实现 75 二十一、完善论坛发布的qq登录插件 77 二十二、倒计时代码 78 二十三、关于ecshop...

    8tupian图片加密平台源码 v3.5.zip

    源码是通过调用八图片平台的API,进行设计开发的。用此源码搭建的网站,用户资金直接进入你自己的支付接口。 8tupian图片加密平台简介: 8tupian图片加密平台是一个可以对图片进行加密的网络平台。 将原始图片上传...

    php中sql注入漏洞示例 sql注入漏洞修复

    通常,用户可以通过以下接口调用数据库的内容:URL地址栏、登陆界面、留言板、搜索框等。这往往给骇客留下了可乘之机。轻则数据遭到泄露,重则服务器被拿下。 一、SQL注入的步骤 a) 寻找注入点(如:登录界面、留言...

    yii2.0使用Plupload实现带缩放功能的多图上传

    本文讲解了plupload的相关代码,实现了ajax多图同时上传,然后将图片进行缩放,最后显示图片,分享给大家供大家参考,具体内容如下 1、文章视图中调用Plupload &lt;?= \common\widgets\Plupload::widget([ 'model...

Global site tag (gtag.js) - Google Analytics