ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでリモート URL を呼び出す 6 つの方法のまとめ

PHP_PHP チュートリアルでリモート URL を呼び出す 6 つの方法のまとめ

WBOY
WBOYオリジナル
2016-07-21 15:43:38873ブラウズ

サンプルコード 1: file_get_contents を使用して、取得モードでコンテンツを取得します

コードをコピーします コードは次のとおりです:

$url='http://www.baidu.com/ ';
$html= file_get_contents($url);
printhr($http_response_header);


コード例 2: fopen を使用して URL を開き、get メソッドを使用してコンテンツを取得します


コードをコピーします

コードは次のとおりです:
$fp=fopen($url, 'r'); printarr(stream_get_meta_data($fp) ); while(!feof($fp)){
$result.=fgets($fp,1024)
echo" body: $result";
printhr();
fclose ($fp);
?>


サンプルコード 3: file_get_contents 関数を使用して投稿モードで URL を取得します



コードをコピーします

コードは次のとおりです:


$data=array(' foo'=>'bar'); $data=http_build_query($data); $opts=array( 'http' =>array( 'method'=>'POST',
'header '=>"Content-type: application/x-www-form-urlencodedrn".
"Content-Length: ".strlen($データ)."rn",
'content'=>$data
),
$context=stream_context_create($opts);
$html=file_get_contents('http://localhost/e/admin/test) .html',false,$context);
echo$html?>


サンプルコード 4: fsockopen 関数を使用して、ヘッダーと本文を含む完全なデータを取得します



コードをコピーします

コードは次のとおりです:

functionget_url($url,$cookie =false){
$url=parse_url($url);
$query=$url[path]。 "?".$url[クエリ]; ec("クエリ:".$クエリ); $fp= fsockopen($url[ホスト],$url[ポート]?$url[ポート]:80,$errno ,$errstr,30); if(!$fp){ }else{
$request= "GET$queryHTTP/1.1rn"; ;
$request.="接続: 閉じる";
if($cookie)$request.="Cookie: $cookie";
fwrite($fp,$request); (!@feof($fp)){
$result.=@fgets($fp,1024);
fclose($fp);
return$result;
// の HTML 部分を取得します。 URL、ヘッダーを削除
functionGetUrlHTML($url,$cookie=false){
$rowdata=get_url($url,$cookie )
if($rowdata)
{
$body=stristr($rowdata,"rnrn) ");
$body=substr($body,4,strlen($body));
return$body;
}
returnfalse;
}
?>


サンプルコード 5: fsockopen 関数を使用して開きますURL を取得し、POST モードでヘッダーと本文を含む完全なデータを取得します



コードをコピーします

コードは次のとおりです:


<
functionHTTP_Post($URL,$data,$cookie,$referrer? =""){
// 指定された URL を解析します
$URL_Info=parse_url($URL);

// リファラーを構築します
if($referrer==" ")// 指定されていない場合は、このスクリプトをリファラーとして使用します
$referrer="111";

// $data から文字列を作成
foreach($dataas$key=>$value) $values[]=" $key=".urlencode($value); =implode("&",$values); // 必要なポートを調べます - 指定されていない場合は標準 (=80) を使用します if(!isset ($URL_Info["port"])) $URL_Info[ "ポート"]=80;

// POSTリクエスト:
$request.="POST ".$URL_Info["path"]." HTTP/ 1.1n";
$request.="ホスト: "; $URL_Info["host"]."n";
$request.="リファラー:$referern";
$request.="コンテンツ タイプ: application/x-www-form-urlencodedn"; "コンテンツの長さ: ".strlen($data_string)."n";
$request.="接続: 閉じる"
$request.="Cookie: $cookien"; $request.=$data_string."n";

$fp=fsockopen($URL_Info["host"],$URL_Info["port"]); ($fp)){
$result.=fgets($fp,1024);
fclose($fp);
printhr()>


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



コードをコピーします

コードは次のとおりです。
$ch =curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://www.baidu.com/'); ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
$file_contents =curl_close($ch);
curl ライブラリについて:
curl 公式 Web サイト http://curl.haxx.se/
curl は、FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE および LDAP をサポートする、URL 構文を使用したファイル転送ツールです。 curl は、SSL 証明書、HTTP POST、HTTP PUT、FTP アップロード、Kerberos、HTTP ベースのアップロード、プロキシ、Cookie、ユーザー + パスワードの証明、ファイル転送の回復、http プロキシ チャネル、その他多くの便利なトリックをサポートしています
コードをコピー コードは次のとおりです:

functionprintarr(array$arr)
{
echo"
行フィールド数: ".count($arr)."
"; foreach($ aras$key=>$value)
{
echo"$key=$value
"
}
}


=========== === ========================================
リモート Web サイトをキャプチャするための PHP コードデータ
多くのプログラミング愛好家が同じ疑問に遭遇するかもしれません。それは、他の人の Web サイトの HTML コードを検索エンジンのようにクロールし、そのコードを収集して自分にとって有用なデータにまとめる方法です。今日の簡単な例

Ⅰ. リモート Web ページのタイトルを取得する例:
以下はコード スニペットです:


コードをコピーします コードは次のとおりです:
/*
+----- -------------------------------------- ------------ ----
+ Web ページのタイトルのコードを取得し、このコード スニペットを直接コピーし、.php ファイルとして保存して実行します。
+---- ------------------------ ---------------------------- ------------
*/

error_reporting(7) ;
$file = fopen ("http://www.jb51.net/", "r"); $file) {
echo "リモート ファイルを開けません。< ;/font>n";
}
while (!feof ($file)) {
$line = fgets ( $file, 1024);
if ("(.*)< ;/title>", $line, $out)) { <br>$title = $out[1]; $title.""; <br>break; <br>} <br>} <br> fclose($file); <br> <br>?> リモート Web ページの HTML コードを取得する例:コード スニペット: <br><br><br><br> コードをコピーします<br><br> コードは次のとおりです: <br> </div> <br><? <br>/* <br>+---------------- <BR>+DNSingスパイダー <div class="codetitle">+---------------- <span style="CURSOR: pointer" onclick="doCopy('code34679')">*/ <U></U>$fp = fsockopen( "www.dnsing.com", 80, $errno, $errstr, 30); (!$fp) { </span>echo "$errstr ($errno)<br/>n"; </div>} else { <div class="codebody" id="code34679"> $out = "GET / HTTP/1.1rn" <BR>$out .= "ホスト:www .dnsing.comrn"; <BR>$out .= "接続: 閉じる rnrn"; <BR>fputs($fp, $out); <BR> while (!feof($fp)) { <BR>echo fgets($fp, 128); <BR> } <br>fclose($fp); <br>//終了 <BR><BR>上記の 2 つのコード スニペットをコピーして実行し、効果を確認してください。上記の例は、Web ページ データをより適切に使用できるようにするための単なるプロトタイプです。したがって、すべてのプログラム愛好家にとって状況は異なります。ここで気をつけて勉強しましょう <br><br>============================== <br><br>もう少し。意味のある関数は次のとおりです。 get_content_by_socket()、Get_url()、get_content_url()、get_content_object は、いくつかのアイデアを提供するいくつかの関数です。 <BR><?php <br><br>//すべてのコンテンツ URL を取得し、ファイルに保存します<BR>function get_index($save_file, $prefix="index_"){ <BR>$count = 68 <BR>$i = 1; $save_file )) @unlink($save_file); <BR>$fp = fopen($save_file, "a+") または die(". $save_file ." を開くことができませんでした"); $url = $i .".htm"; <BR>echo ". $url ."..."; <BR>echo "OKn"; ($ fp, $url_str); <BR>++$i; <BR>} <BR>fclose($fp) <BR>} <BR><BR>// ターゲットのマルチメディア オブジェクトを取得します<BR> function get_object($url_file, $save_file, $split="|- -:* *:--|"){ <BR>if (!file_exists($url_file)) die($url_file ." 存在しません"); <BR>$file_arr = file($url_file); <br>if (!is_array($file_arr) ) || 空($file_arr)) die($url_file ." コンテンツではありません"); <br>$url_arr = array_unique($file_arr); @unlink($save_file); fopen($ save_file, "a+") または die("保存ファイル ". $save_file ." を開くことができませんでした"); <BR>foreach($url_arr as $url){ <BR>if (empty($url)) <BR>echo " Get ". $url ."..."; <BR>$html_str = get_url($url); <BR>echo $html_str; <BR>echo $url; <BR>exit; <BR>$obj_str = get_content_object($html_str); <BR>echo "OKn" ; <BR>fwrite ($fp, $obj_str); <BR>} <BR>fclose($fp) <BR>} <BR><BR>//ファイルの内容を取得する<BR>function get_dir($save_file, $dir){ <BR>$dp = opendir ($dir); <BR> if (file_exists($save_file)) @unlink($save_file); <BR>$fp = fopen($save_file, "a+") または die("保存ファイル ". $save_file ." を開くことができませんでした") ; <BR>while(($ file = readdir($dp)) != false){ <br>if ($file!="." && $file!=".."){ <br>echo "$file を読み取ります。 "..."; <BR>$file_content = file_get_contents($dir . $file); <BR>$obj_str = get_content_object($file_content); <BR>fwrite($fp, $obj_str); fclose($fp); <BR>} <BR><BR><BR>//指定された URL の内容を取得します<BR>function get_url($url){ <BR>$reg = '/^http://[^/].+$/'; if (!preg_match($reg, $ url)) die($url ." 無効"); <BR>$fp = fopen($url, "r") または die("URL を開く: ". $url ." が失敗しました。 "); <BR>while($fc = fread($fp, 8192)){ <BR>$content .= $fc; <BR>} <BR>fclose($fp); <BR>if (empty($content)){ <br>die("Get url: ". $url ." コンテンツが失敗しました。"); <br>} <BR>return $content; <BR>} <BR><BR>//ソケットを使用して指定された Web ページを取得します<BR>function get_content_by_socket($url, $host){ <BR>$fp = fsockopen($host, 80) または die("「. $url ." を開くことができませんでした」); <BR>$header = "GET /".$url ." HTTP/1.1rn"; <BR>$header .= "Accept: * /*rn"; <BR>$header .= "Accept -Language: zh-cnrn"; <BR>$header .= "Accept-Encoding: gzip, deflatern"; <BR>$header .= "User-Agent: Mozilla/4.0 (互換性あり) ; MSIE 6.0; Windows NT SV1; InfoPath.1; <BR>$header .= "ホスト: ".$host ."rn"; <BR>$header : キープアライブン"; <BR>//$header . = "Cookie: cnzz02=2; rtime=1148456424859; cnzz_eid=56601755-rnrn"; <br>$header .= "接続: Closernrn"; <br><BR>fwrite( $fp, $header); <BR>while (!feof ($fp)) { <BR>$contents .= fgets($fp, 8192) <BR>} <BR>fclose($fp); //指定されたコンテンツの URL を取得します <BR>function get_content_url( $host_url, $file_contents){ <BR><BR>//$reg = '/^(#|javascript.*?|ftp://.+|http://. +|.*?href.*?|play.* ?|index.*?|.*?asp)+$/i' <BR>//$reg = '/^(down.*?.html|d+) _d+.htm.*?)$/i'; <BR> $rex = "/([hH][rR][eE][Ff])s*=s*['"]*([^>'"s ]+)["'>]*s*/ i"; <br>$reg = '/^(down.*?.html)$/i'; $result = ""; //array(); <br> foreach($r as $c){ <br>if (is_array($c)){ <br>foreach($c as $d){ <br>if (preg_match($reg, $d)){ $result .= $host_url . $ d."n" } <br>} <br>} <br>} <br>return $result; <br><br>// 指定された content<br> 関数でマルチメディア ファイルを取得します。 str, $split="|--:**:- -|"){ <br>$regx = "/hrefs*=s*['"]*([^>'"s]+)["'> ;]*s*(<b>.*?< ;/b>)/i"; <br>preg_match_all($regx, $str, $result); <br><br>if (count($result) == 3){ <br>$result[2] = str_replace("<b> マルチメディア: ", "", $result[2]); <br>$result[2] = str_replace("</b>", "", $result [2]); <BR>$result[1] [0] .$result[2][0] <BR>} <BR>$result?> ============== =================================== ==== <br><br>同じドメイン名が複数のIPに対応する場合、リモートWebページのコンテンツを取得するPHPの関数<br><br>fgcは単にそれを読み取り、すべての操作をカプセル化します<br>fopenもいくつかのカプセル化を実行しますが、読み込む必要がありますすべてのデータを取得するループ。 <br>fsockopen これは直線のソケット操作です。<br>HTMLページを読むだけならfgcの方が良いです。 <br>会社がファイアウォールを介してインターネットにアクセスする場合、一般的な file_get_content 関数は機能しません。もちろん、いくつかのソケット操作を通じて http リクエストをプロキシに直接書き込むこともできますが、それはより面倒です。 <br>ファイルが小さいことが確認できたら、上記の 2 つのメソッド fopen,join('',file($file)); のいずれかを選択できます。たとえば、1k 未満のファイルのみを操作する場合は、file_get_contents を使用するのが最適です。 <br><br> ファイルが大きいことが確実な場合、またはファイルのサイズを判断できない場合は、ファイル ストリーミングを使用するのが最善です。 1K ファイルを開くことと 1G ファイルを開くことの間に明らかな違いはありません。コンテンツが長ければ長いほど、スクリプトを読み終えるのではなく、読むのに時間がかかります。 <br><br>------------------------------------------------ ---- <br>http://www.phpcake.cn/archives/tag/fsockopen <br>PHP には、file_get_contents や fopen などの独自の関数を使用するなど、リモート Web コンテンツを取得するさまざまな方法があります。 <br><br><?php <br><br>echo file_get_contents("http://img.jb51.net/abc.php"); <br>?><br> ただし、DNSポーリングなどの負荷分散では、同じドメイン名が対応する場合があります。複数 1 つのサーバー、複数の IP。 img.jb51.net は、DNS によって 72.249.146.213、72.249.146.214、および 72.249.146.215 の 3 つの IP に解決されると仮定します。ユーザーが img.jb51.net にアクセスするたびに、システムは、対応する負荷分散アルゴリズム。 <br> 先週、ビデオ プロジェクトに取り組んでいたとき、このような要件に遭遇しました。このサーバーの送信ステータスをクエリするために、各サーバー上の PHP インターフェイス プログラム (abc.php とします) にアクセスする必要がありました。 <br><br> 現時点では、特定のサーバーに繰り返しアクセスし続ける可能性があるため、file_get_contents を使用して http://img.jb51.net/abc.php に直接アクセスすることはできません。 <br><br> そして、これら 3 つのサーバー上で http://72.249.146.213/abc.php、http://72.249.146.214/abc.php、http://72.249.146.215/abc.php に順番にアクセスすると、これもWeb サーバーに複数の仮想ホストが搭載されている場合は使用できません。 <br><br> ホストは同じドメイン名に対応する複数のIPを設定できないため、ローカルホストを設定することはできません。 <br><br> これは、PHP と HTTP プロトコルを通じてのみ実現できます。abc.php にアクセスするときに、ヘッダーに img.jb51.net ドメイン名を追加します。そこで、次の PHP 関数を作成しました: <br><div class="codetitle"> <span style="CURSOR: pointer" onclick="doCopy('code34015')"><u>コードをコピー</u></span> コードは次のとおりです:</div> <div class="codebody" id="code34015"> <br><?php <br><br>/************************* <br>* 機能使用法:同一ドメイン名が複数のIPに対応する場合、指定したサーバーのリモートWebページコンテンツを取得<br>* 作成時刻: 2008-12-09 <br>* 作成者: Zhang Yan (img.jb51.net) <br>* パラメーターの説明: <br>* $ip サーバーの IP アドレス <br>* $host サーバーのホスト名 <br>* $url URL アドレスサーバーの(ドメイン名を除く) <br>* 戻り値: <br>* リモート Web ページのコンテンツを取得しました <br>* false リモート Web ページへのアクセスに失敗しました <br>******************** ***********/ <br>function HttpVisit($ip, $host, $url ) <br>{ <br>$errstr = ''; <br>$fp = fsockopen ($ip, 80, $errstr, 90) <br>{ <br>return false; <br>} <br>else <br>{ <br>$out = "GET {$url} HTTP/1.1rn"; <br>$out .= "ホスト:{$host}rn"; <br>fputs ($fp, $out); <br><br>while($line = fread($fp, 4096)){ <br>$response .= $line; <br>} <br>fclose( $fp )// ヘッダー情報を削除します<br> $pos = strpos($response, "rnrn"); <br>$response = substr($response, $pos + 4); <br><br>return $response; <br>} <br><br>//メソッドの呼び出し: <br>$server_info1 = HttpVisit ("72.249.146.213", "img.jb51.net", "/abc.php"); <br>$server_info2 = HttpVisit("72.249.146.214", "img.jb51.net", "/abc.php") ) ; <br>$server_info3 = HttpVisit("72.249.146.215", "img.jb51.net", "/abc.php"); <br> <br><br><br>http://www.bkjia.com/PHPjc/320696.html<br><br>www.bkjia.com<br><br>tru​​e</div>http://www.bkjia.com/PHPjc/320696.html<p align="left"></p> <div style="display:none;">技術記事<span id="url" itemprop="url"></span>サンプル コード 1: file_get_contents を使用して、次のようにコードをコピーします。 ($http_response_he. ..<span id="indexUrl" itemprop="indexUrl"></span><span id="isOriginal" itemprop="isOriginal"></span> <span id="isBasedOnUrl" itemprop="isBasedOnUrl"></span> </div> </div></div><div class="nphpQianMsg"><div class="clear"></div></div><div class="nphpQianSheng"><span>声明:</span><div>この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。</div></div></div><div class="nphpSytBox"><span>前の記事:<a class="dBlack" title="php_PHPチュートリアルでjQuery拡張機能を実装する" href="http://m.php.cn/ja/faq/310315.html">php_PHPチュートリアルでjQuery拡張機能を実装する</a></span><span>次の記事:<a class="dBlack" title="php_PHPチュートリアルでjQuery拡張機能を実装する" href="http://m.php.cn/ja/faq/310317.html">php_PHPチュートリアルでjQuery拡張機能を実装する</a></span></div><div class="nphpSytBox2"><div class="nphpZbktTitle"><h2>関連記事</h2><em><a href="http://m.php.cn/ja/article.html" class="bBlack"><i>続きを見る</i><b></b></a></em><div class="clear"></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="fluid" data-ad-layout-key="-6t+ed+2i-1n-4w" data-ad-client="ca-pub-5902227090019525" data-ad-slot="8966999616"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><ul class="nphpXgwzList"><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/1.html" title="cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法" class="aBlack">cURL を使用して PHP で Get リクエストと Post リクエストを実装する方法</a><div class="clear"></div></li><li><b></b><a href="http://m.php.cn/ja/faq/2.html" title="正規表現内のすべての式記号 (概要)" class="aBlack">正規表現内のすべての式記号 (概要)</a><div class="clear"></div></li></ul></div></div><ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5902227090019525" data-ad-slot="5027754603"></ins><script> (adsbygoogle = window.adsbygoogle || []).push({}); </script><footer><div class="footer"><div class="footertop"><img src="/static/imghwm/logo.png" alt=""><p>福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!</p></div><div class="footermid"><a href="http://m.php.cn/ja/about/us.html">私たちについて</a><a href="http://m.php.cn/ja/about/disclaimer.html">免責事項</a><a href="http://m.php.cn/ja/update/article_0_1.html">Sitemap</a></div><div class="footerbottom"><p> © php.cn All rights reserved </p></div></div></footer><script>isLogin = 0;</script><script type="text/javascript" src="/static/layui/layui.js"></script><script type="text/javascript" src="/static/js/global.js?4.9.47"></script></div><script src="https://vdse.bdstatic.com//search-video.v1.min.js"></script><link rel='stylesheet' id='_main-css' href='/static/css/viewer.min.css' type='text/css' media='all'/><script type='text/javascript' src='/static/js/viewer.min.js?1'></script><script type='text/javascript' src='/static/js/jquery-viewer.min.js'></script><script>jQuery.fn.wait = function (func, times, interval) { var _times = times || -1, //100次 _interval = interval || 20, //20毫秒每次 _self = this, _selector = this.selector, //选择器 _iIntervalID; //定时器id if( this.length ){ //如果已经获取到了,就直接执行函数 func && func.call(this); } else { _iIntervalID = setInterval(function() { if(!_times) { //是0就退出 clearInterval(_iIntervalID); } _times <= 0 || _times--; //如果是正数就 -- _self = $(_selector); //再次选择 if( _self.length ) { //判断是否取到 func && func.call(_self); clearInterval(_iIntervalID); } }, _interval); } return this; } $("table.syntaxhighlighter").wait(function() { $('table.syntaxhighlighter').append("<p class='cnblogs_code_footer'><span class='cnblogs_code_footer_icon'></span></p>"); }); $(document).on("click", ".cnblogs_code_footer",function(){ $(this).parents('table.syntaxhighlighter').css('display','inline-table');$(this).hide(); }); $('.nphpQianCont').viewer({navbar:true,title:false,toolbar:false,movable:false,viewed:function(){$('img').click(function(){$('.viewer-close').trigger('click');});}}); </script></body></html>