PHP下打開(kāi)URL地址的幾種方法小結(jié)
更新時(shí)間:2010年05月16日 21:52:58 作者:
PHP中打開(kāi)URL地址的幾種方法總結(jié),這里的函數(shù)主要用于小偷采集等函數(shù)。
1: 用file_get_contents 以get方式獲取內(nèi)容
<?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打開(kāi)url, 以get方式獲取內(nèi)容
<?
$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函數(shù),以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函數(shù)打開(kāi)url,以get方式獲取完整的數(shù)據(jù),包括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函數(shù)打開(kāi)url,以POST方式獲取完整的數(shù)據(jù),包括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庫(kù),使用curl庫(kù)之前,你可能需要查看一下php.ini,查看是否已經(jīng)打開(kāi)了curl擴(kuò)展
<?
$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;
?>
關(guān)于curl庫(kù):
curl官方網(wǎng)站http://curl.haxx.se/
curl 是使用URL語(yǔ)法的傳送文件工具,支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL證書(shū)、HTTP POST、HTTP PUT 、FTP 上傳,kerberos、基于HTT格式的上傳、代理、cookie、用戶+口令證明、文件傳送恢復(fù)、http代理通道和大量其他有用的技巧
<?
function printarr(array $arr)
{
echo "<br> Row field count: ".count($arr)."<br>";
foreach($arr as $key=>$value)
{
echo "$key=$value <br>";
}
}
?>
7.
有些主機(jī)服務(wù)商把php的allow_url_fopen選項(xiàng)是關(guān)閉了,就是沒(méi)法直接使用file_get_contents來(lái)獲取遠(yuǎn)程web頁(yè)面的內(nèi)容。那就是可以使用另外一個(gè)函數(shù)curl。
下面是file_get_contents和curl兩個(gè)函數(shù)同樣功能的不同寫(xiě)法
file_get_contents函數(shù)的使用示例:
< ?php
$file_contents = file_get_contents('http://www.ccvita.com/');
echo $file_contents;
?>
換成curl函數(shù)的使用示例:
< ?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函數(shù)來(lái)判斷php是否支持一個(gè)函數(shù)可以輕松寫(xiě)出下面函數(shù)
< ?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;
}
?>
其實(shí)上面的這個(gè)函數(shù)還有待商榷,如果你的主機(jī)服務(wù)商把file_get_contents和curl都關(guān)閉了,上面的函數(shù)就會(huì)出現(xiàn)錯(cuò)誤。
復(fù)制代碼 代碼如下:
<?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打開(kāi)url, 以get方式獲取內(nèi)容
復(fù)制代碼 代碼如下:
<?
$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函數(shù),以post方式獲取url
復(fù)制代碼 代碼如下:
<?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函數(shù)打開(kāi)url,以get方式獲取完整的數(shù)據(jù),包括header和body
復(fù)制代碼 代碼如下:
<?
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函數(shù)打開(kāi)url,以POST方式獲取完整的數(shù)據(jù),包括header和body
復(fù)制代碼 代碼如下:
<?
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庫(kù),使用curl庫(kù)之前,你可能需要查看一下php.ini,查看是否已經(jīng)打開(kāi)了curl擴(kuò)展
復(fù)制代碼 代碼如下:
<?
$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;
?>
關(guān)于curl庫(kù):
curl官方網(wǎng)站http://curl.haxx.se/
curl 是使用URL語(yǔ)法的傳送文件工具,支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。curl 支持SSL證書(shū)、HTTP POST、HTTP PUT 、FTP 上傳,kerberos、基于HTT格式的上傳、代理、cookie、用戶+口令證明、文件傳送恢復(fù)、http代理通道和大量其他有用的技巧
復(fù)制代碼 代碼如下:
<?
function printarr(array $arr)
{
echo "<br> Row field count: ".count($arr)."<br>";
foreach($arr as $key=>$value)
{
echo "$key=$value <br>";
}
}
?>
7.
有些主機(jī)服務(wù)商把php的allow_url_fopen選項(xiàng)是關(guān)閉了,就是沒(méi)法直接使用file_get_contents來(lái)獲取遠(yuǎn)程web頁(yè)面的內(nèi)容。那就是可以使用另外一個(gè)函數(shù)curl。
下面是file_get_contents和curl兩個(gè)函數(shù)同樣功能的不同寫(xiě)法
file_get_contents函數(shù)的使用示例:
復(fù)制代碼 代碼如下:
< ?php
$file_contents = file_get_contents('http://www.ccvita.com/');
echo $file_contents;
?>
換成curl函數(shù)的使用示例:
復(fù)制代碼 代碼如下:
< ?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函數(shù)來(lái)判斷php是否支持一個(gè)函數(shù)可以輕松寫(xiě)出下面函數(shù)
復(fù)制代碼 代碼如下:
< ?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;
}
?>
其實(shí)上面的這個(gè)函數(shù)還有待商榷,如果你的主機(jī)服務(wù)商把file_get_contents和curl都關(guān)閉了,上面的函數(shù)就會(huì)出現(xiàn)錯(cuò)誤。
您可能感興趣的文章:
- THinkPHP獲取客戶端IP與IP地址查詢的方法
- PHP獲取客戶端及服務(wù)器端IP的封裝類
- thinkphp如何獲取客戶端IP
- php中獲取遠(yuǎn)程客戶端的真實(shí)ip地址的方法
- PHP 顯示客戶端IP與服務(wù)器IP的代碼
- PHP 獲取客戶端真實(shí)IP地址多種方法小結(jié)
- php 獲取客戶端的真實(shí)ip
- php 獲取完整url地址
- php獲取當(dāng)前頁(yè)面完整URL地址
- php提取字符串中網(wǎng)站url地址的方法
- php實(shí)現(xiàn)把url轉(zhuǎn)換迅雷thunder資源下載地址的方法
- php獲取客戶端IP及URL的方法示例
相關(guān)文章
php-fpm開(kāi)啟狀態(tài)統(tǒng)計(jì)的方法詳解
這篇文章主要給大家介紹了php-fpm開(kāi)啟狀態(tài)統(tǒng)計(jì)的方法,文中介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06
PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能示例
這篇文章主要介紹了PHP使用 Imagick 擴(kuò)展實(shí)現(xiàn)圖片合成,圓角處理功能,結(jié)合具體實(shí)例形式分析了PHP使用 Imagick 擴(kuò)展的圖形處理、生成相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
php下載文件超時(shí)時(shí)間的設(shè)置方法
這篇文章W主要介紹了php下載文件超時(shí)時(shí)間的設(shè)置方法2016-10-10
PHP高效處理前端數(shù)據(jù)過(guò)濾二維數(shù)組并存入數(shù)據(jù)庫(kù)
這篇文章主要介紹了PHP高效處理前端數(shù)據(jù)過(guò)濾二維數(shù)組并存入數(shù)據(jù)庫(kù),通過(guò)從二維數(shù)組獲取指定數(shù)據(jù),組成新二維數(shù)組實(shí)現(xiàn)過(guò)程示例來(lái)為大家講解2023-10-10

