【oschina】PHP获取网页内容的几种方法

原文链接:http://www.oschina.net/code/snippet_861770_19638

方法1: 用 file_get_contents 以get方式获取内容
<?php
$url = 'http://www.domain.com/?para=123' ;
$html = file_get_contents ( $url );
echo $html ;
?>
 
方法2:用 file_get_contents 函数,以post方式获取url
<?php
$url = 'http://www.domain.com/test.php?id=123' ;
$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
)
);
$ctx = stream_context_create( $opts );
$html = @ file_get_contents ( $url , '' , $ctx );
 
如果需要再传递cookie数据,则把
'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
                   "Content-Length: " . strlen ( $data ) . "\r\n" ,
修改为
'header' => "Content-type: application/x-www-form-urlencoded\r\n" .
                  "Content-Length: " . strlen ( $data ) . "\r\n" .
                  "cookie:cookie1=c1;cookie2=c2\r\n" ;
即可
 
方法3: 用 fopen 打开url, 以get方式获取内容
<?php
$fp = fopen ( $url , 'r' );
$header = stream_get_meta_data( $fp ); //获取报头信息
while (! feof ( $fp )) {
$result .= fgets ( $fp , 1024);
}
echo "url header: {$header} <br>" :
echo "url body: $result" ;
fclose( $fp );
?>
 
方法4: 用 fopen 打开url, 以post方式获取内容
<?php
$data = array ( 'foo2' => 'bar2' , 'foo3' => 'bar3' );
$data = http_build_query( $data );
 
$opts = array (
'http' => array (
'method' => 'POST' ,
'header' => "Content-type: application/x-www-form-urlencoded\r\nCookie:cook1=c3;cook2=c4\r\n" .
"Content-Length: " . strlen ( $data ) . "\r\n" ,
'content' => $data
)
);
 
$context = stream_context_create( $opts );
$html = fopen ( 'http://www.test.com/zzzz.php?id=i3&id2=i4' , 'rb' ,false, $context );
$w = fread ( $html ,1024);
echo $w ;
?>
 
方法5:用 fsockopen 函数打开url,以get方式获取完整的数据,包括header和body
<?php
function get_url ( $url , $cookie =false)
{
$url = parse_url ( $url );
$query = $url [path]. "?" . $url [query];
echo "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\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
function GetUrlHTML( $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 ;
}
 
    return false;
}
?>
 
方法6:用 fsockopen 函数打开url,以POST方式获取完整的数据,包括header和body
<?php
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 ;
}
 
?>
 
方法7:使用curl库,使用curl库之前,可能需要查看一下php.ini是否已经打开了curl扩展
<?php
$ch = curl_init();
$timeout = 5;
curl_setopt ( $ch , CURLOPT_URL, 'http://www.domain.com/' );
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt ( $ch , CURLOPT_CONNECTTIMEOUT, $timeout );
$file_contents = curl_exec( $ch );
curl_close( $ch );
 
echo $file_contents ;
?>

转载于:https://www.cnblogs.com/msmailcode/articles/5885859.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值