ホームページ  >  記事  >  バックエンド開発  >  PHPでページコンテンツを取得する方法は何ですか

PHPでページコンテンツを取得する方法は何ですか

爱喝马黛茶的安东尼
爱喝马黛茶的安东尼オリジナル
2019-08-28 10:44:054897ブラウズ

PHPでページコンテンツを取得する方法は何ですか

# PHP が Web ページのコンテンツを取得するためのいくつかの方法

方法 1: file_get_contents を使用して get でコンテンツを取得するモード。

<?php 
$url=&#39;http://www.domain.com/?para=123&#39;; 
$html= file_get_contents($url); 
echo$html; 
?>

方法 2: file_get_contents 関数を使用して、投稿モードで URL を取得します。

<?php 
$url= &#39;http://www.domain.com/test.php?id=123&#39;; 
$data= array(&#39;foo&#39;=> &#39;bar&#39;); 
$data= http_build_query($data); 
$opts= array( 
&#39;http&#39;=> array( 
   &#39;method&#39;=> &#39;POST&#39;, 
   &#39;header&#39;=>"Content-type: application/x-www-form-urlencoded\r\n"  . 
       "Content-Length: "  . strlen($data) . "\r\n", 
   &#39;content&#39;=> $data 
)
); 
$ctx= stream_context_create($opts);
$html= @file_get_contents($url,&#39;&#39;,$ctx);

Cookie データを再度渡す必要がある場合は、

&#39;header&#39;=>"Content-type: application/x-www-form-urlencoded\r\n"  .
"Content-Length: "  . strlen($data) . "\r\n",

&#39;header&#39;=>"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 を開き、取得モードでコンテンツを取得します。

<?php 
$fp= fopen($url,&#39;r&#39;); 
$header= stream_get_meta_data($fp);//获取报头信息 
while(!feof($fp)) { 
$result.= fgets($fp, 1024); 
} 
echo"url header: {$header} <br>": 
echo"url body: $result"; 
fclose($fp); 
?>

関連する推奨事項:「

PHP 入門チュートリアル

方法 4: fopen を使用して URL を開き、投稿モードでコンテンツを取得します。

<?php 
$data= array(&#39;foo2&#39;=> &#39;bar2&#39;,&#39;foo3&#39;=>&#39;bar3&#39;); 
$data= http_build_query($data); 
$opts= array(
&#39;http&#39;=> array( 
&#39;method&#39;=> &#39;POST&#39;,
&#39;header&#39;=>"Content-type: application/x-www-form-urlencoded\r\nCookie:cook1=c3;cook2=c4\r\n"  . 
"Content-Length: "  . strlen($data) . "\r\n", 
&#39;content&#39;=> $data 
) 
); 
$context= stream_context_create($opts); 
$html= fopen(&#39;http://www.test.com/zzzz.php?id=i3&id2=i4&#39;,&#39;rb&#39;,false, $context); 
$w=fread($html,1024);
echo$w; 
?>

方法 5: fsockopen 関数を使用して URL を開き、ヘッダーと本文を含む完全なデータを取得モードで取得します。

<?php 
functionget_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) {
returnfalse; 
}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 
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; 
} 
?>

方法 6: fsockopen 関数を使用して URL を開き、ヘッダーと本文を含む完全なデータを POST モードで取得します。

<?php 
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; 
} 
?>

方法 7:curl ライブラリを使用するcurl ライブラリを使用する前に、php.ini でcurl 拡張機能がオンになっているかどうかを確認する必要がある場合があります。

<?php
$ch= curl_init(); 
$timeout= 5;
curl_setopt ($ch, CURLOPT_URL, &#39;http://www.domain.com/&#39;);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents= curl_exec($ch);
curl_close($ch); 
echo$file_contents;
?>

ここでは、php を使用して Web ページのソース コードを取得し、Web コンテンツをクロールするための 3 つの方法を集めました。実際のニーズに応じて選択できます。

1. file_get_contents を使用して Web ページのソース コードを取得します

この方法は最も一般的に使用され、必要なコードは 2 行だけで、非常にシンプルで便利です。

参照コード:

<?php
$fh= file_get_contents(&#39;http://www.webkaka.com/&#39;);
echo $fh;
?>

2. fopen を使用して Web ページのソース コードを取得する

この方法は多くの人が使用していますが、コード量が多くなります。

参考コード:

<?php
$fh = fopen(&#39;http://www.webkaka.com/&#39;, &#39;r&#39;);
if($fh){
    while(!feof($fh)) {
        echo fgets($fh);
    }
}
?>

3.curlを使ってWebページのソースコードを取得する

curlを使ってWebページのソースコードを取得する方法は以下の通りです。 Web ページのコンテンツをクロールする必要がある場合、Web ページのヘッダー情報、ENCODING エンコードの使用、USERAGENT の使用などを取得することもできます。など、より高い要件を持つユーザーによってよく使用されます。

参照コード 1:

<?php
// 创建一个新cURL资源
$ch = curl_init();
// 设置URL和相应的选项
curl_setopt($ch, CURLOPT_URL, "http://www.webkaka.com/");
curl_setopt($ch, CURLOPT_HEADER, false);
// 抓取URL并把它传递给浏览器
data=curlexec(ch);
echo $data;
//关闭cURL资源,并且释放系统资源
curl_close($ch);
?>

参照コード 2:

<?php
$szUrl = "http://www.webkaka.com/";
$UserAgent = &#39;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; .NET CLR 
3.0.04506; 
.NET CLR 3.5.21022; .NET CLR 1.0.3705; .NET CLR 1.1.4322)&#39;;
$curl = curl_init();
curl_setopt(curl,CURLOPTURL,szUrl);
curl_setopt($curl, CURLOPT_HEADER, 0);  //0表示不输出Header,1表示输出
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_ENCODING, &#39;&#39;);
curl_setopt(curl,CURLOPTUSERAGENT,UserAgent);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
data=curlexec(curl);
echo $data;
//echo curl_errno($curl); //返回0时表示程序执行成功 如何从curl_errno返回值获取错误信息

以上がPHPでページコンテンツを取得する方法は何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。