ホームページ php教程 php手册 PHPでリモートURLを呼び出す6つの方法まとめ

PHPでリモートURLを呼び出す6つの方法まとめ

Jun 13, 2016 pm 12:21 PM
file get php url コード による 内部 方法 方法 使用 得る 移行 リモートで

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

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


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


サンプルコード 2: fopen で URL を取得し、コンテンツを取得するメソッド



コードをコピー

コードは次のとおりです。$fp=fopen($url,' r'); printarr(stream_get_meta_data($fp));

while(!feof($fp)); result.=fgets($fp,1024) ;

}
echo "url body: $result";
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( $data)."rn", 'content'=>$data

),

);
$context =stream_context_create($opts);
$html=file_get_contents(' http://localhost/e/admin/test.html',false,$context);


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



コードをコピーします

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


functionget_url($url,$cookie=false){
$url=parse_url($url); $query=$url[パス]."?".$url[クエリ];
ec("クエリ:".$query);

$fp=fsockopen($url[ホスト],$url[ポート]?$url[ポート]:80,$errno,$errstr,30);
if(!$fp){
returnfalse;

$request="GET$ queryHTTP/1.1rn"; $request.="ホスト:$url[ホスト] rn"; $request.="接続: 閉じる"; if($cookie)$request.=" Cookie: $cookien"; $request.="rn";

fwrite ($fp,$request);

while(!@feof($fp)){
$result.= @fgets($fp,1024);
}
fclose($fp) ;
}
}
// URL の HTML 部分を取得します。ヘッダーを削除します
functionGetUrlHTML($url,$cookie=false){
$rowdata=get_url ($url,$cookie)
if($rowdata)
{
$body= stristr($rowdata,"rnrn");
$body=substr($body,4,strlen ($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);
$data_string=implode("&",$values);

// 必要なポートを調べます - 指定されていない場合は標準 (=80) を使用します if(!isset($URL_Info["port"])) $URL_Info["port"]=80 ;

// POST リクエストの構築:

$request.="POST ".$URL_Info["path"]." HTTP/1.1n";
$request.="ホスト: ".$URL_Info["host"]."n";
$request.="リファラー:$referern";
$request.="Content-type: application/x-www-form-urlencodedn" ;
$request.="Content-length: ".strlen($data_string)."n ";
$request.="接続: 閉じる";
$request.="Cookie: $cookien ";
$request.="n";
$request.=$data_string. "n";

$fp=fsockopen($URL_Info["host"],$URL_Info[" port"]);
fputs($fp,$request); feof($fp)){
$result.=fgets($fp,1024);
fclose($fp);
return$result; ();
?>


サンプル コード 6:curl ライブラリを使用する場合は、ライブラリをカールする前に、php.ini をチェックして、curl 拡張機能が有効になっているかどうかを確認する必要があります。



コードをコピーします

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

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


<
functionprintarr(array$arr)
{
echo" ";
foreach($arras$key=>$value)
{
echo"$key= $value < ;br>";
}
}
?>


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

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

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


/*
--------------------- ------------- -----------------------------
コードを取得するにはWeb ページのタイトルを入力するには、このコード スニペットを直接コピーし、.php ファイルとして保存して実行します。
---------------------- はい。 ------------------------ --------------
*/

error_reporting(7);
$file = fopen ("http://www.jb51.net /", "r");
if (!$file) {
echo "リモート ファイルを開けません。n";
exit;
}
while (!feof ($file)) {
$line = fgets ($file) , 1024);
if ("(.*);", $line, $out)) {
$title = $out[1]; echo "".$title."";
break;
}
fclose($file)
?>

Ⅱ. リモート Web ページの HTML コードを取得する例:

以下のコード スニペットです:



コードをコピーします

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

/* -- ----------------

DNSing Spider

----------------
*/

$ fp = fsockopen("www.dnsing.com", 80, $ errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)
n"; else {
$out = "GET / HTTP/1.1rn";
$out .= "ホスト:www.dnsing.comrn";
$out .= "接続: rnrn を閉じます"; );
while (!feof($fp)) {
echo fgets($fp, 128)
}
fclose ($fp);
?>

上記の 2 つのコード スニペットをコピーして実行し、効果を確認してください。上記の例は、Web ページ データをより適切に使用するためのプロトタイプです。したがって、プログラム愛好家にとっては状況が異なります。 、気をつけて勉強しましょう

===============================。 =

それは少し意味があります。関数は次のとおりです: get_content_by_socket()、get_url()、get_content_url()、get_content_object いくつかの関数を使用すると、いくつかのアイデアが得られるかもしれません。

//すべてのコンテンツ 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 ") または die("Open ". $save_file . " 失敗しました ");
while($i<$count){
$url = $prefix .".htm";
echo ". $url ." ;
$url_str = get_content_url(get_url($url));
echo " OKn";
$i>; ($ fp);
}

//ターゲットのマルチメディア オブジェクトを取得します
function get_object($url_file, $save_file, $split="|--:**:--|") {
if (!file_exists($url_file)) die($url_file ." 存在しません");
$file_arr = file($url_file);
if (!is_array($file_arr) || 空($file_arr )) die($url_file ." コンテンツではありません");
$url_arr = array_unique($file_arr)
if (file_exists($save_file)) @unlink($save_file); fp = fopen ($save_file, "a ") または die("保存ファイルを開く ". $save_file ." 失敗しました");
foreach($url_arr as $url){
if (empty($url) ) 続行;
$html_str = get_url);
echo $url; ;
$obj_str = get_content_str);
echo " OKn";
fclose($fp);

// ディレクトリを走査してファイルの内容を取得します
function get_dir($save_file, $dir){
$dp = opendir($dir)
if (file_exists($save_file); )) @unlink($ save_file);
$fp = fopen($save_file, "a ") または die("保存ファイル ". $save_file ." を開くことができませんでした"); readdir($dp)) != false){
if ($file!="." && $file!=".."){
echo "ファイルを読み取ります ". $file ."... ";
$ file_content = file_get_contents($dir . $file);
$obj_str = get_content_object($file_content);
echo " OKn";
fwrite($fp, $obj_str);
}
}
fclose($fp);
}


//指定された URL コンテンツを取得します
function get_url($url){
$ reg = '/^http: //[^/]. $/'
if (!preg_match($reg, $url)) die($url ." 無効"); ($url, "r" ) または die("URL を開く: ". $url ." に失敗しました。");
while($fc = fread($fp, 8192)){
$content .= $fc;
}
fclose($fp);
if (empty($content)){
die("URL の取得に失敗しました。"); 🎜>}
return $content;
}

//ソケットを使用して指定された Web ページを取得します
function get_content_by_socket($url, $host){
$fp = fsockopen ($host, 80) または die(" Open ". $url ." 失敗しました");
$header = "GET /".$url ." HTTP/1.1rn"; Accept: */*rn";
$header .= "Accept-Language: zh-cnrn";
$header .= "Accept-Encoding: gzip, deflatern";
$header .= "ユーザー エージェント: Mozilla/4.0 (互換性; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; InfoPath.1; .NET CLR 2.0.50727)rn";
$header .= "ホスト: ". $host . "rn";
$header . = "接続: Keep-Alivern";
//$header .= "Cookie: cnzz02=2; rtime=1; ltime=1148456424859; cnzz_eid=56601755-rnrn";
$header .= "接続: Closernrn";

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

//content で指定されたマルチメディア ファイルを取得します
function get_content_object($str, $split="|--:**:--|"){
$regx = "/ hrefs*=s*['"]*( [^>'"s] )["'>]*s*(.*?)/i"; preg_match_all($regx, $str, $result) ;

if (count($result) == 3){
$result[2] = str_replace("マルチメディア: ", "", $result[2]);
$result[2] = str_replace("
", "", $result[2]); [0] .$result[2 ][0] . "n"
}

; =========== ====================================== ====

同じ ドメイン名が複数の IP に対応する場合、リモート Web ページのコンテンツを取得する PHP の機能

fgc は単純にそれを読み取り、すべての操作をカプセル化します
fopen も実行しますいくつかのカプセル化が行われますが、すべてのデータをループで読み取る必要があります。
fsockopen これは直線のソケット操作です。
HTML ページを読むだけの場合は、fgc の方が適しています。
会社がファイアウォールを介してインターネットにアクセスしている場合、一般的な file_get_content 関数は機能しません。もちろん、いくつかのソケット操作を通じて http リクエストをプロキシに直接書き込むこともできますが、それはより面倒です。
ファイルが小さいことが確認できた場合は、上記の 2 つのメソッド fopen,join('',file($file)); のいずれかを選択できます。たとえば、1k 未満のファイルのみを操作する場合は、file_get_contents を使用するのが最適です。

ファイルが大きいことが確実な場合、またはファイルのサイズを特定できない場合は、ファイル ストリームを使用するのが最善です。 1K ファイルを開くことと 1G ファイルを開くことの間に明らかな違いはありません。コンテンツが長い場合、スクリプトを読み終えるのではなく、読むのに時間がかかります。

------------------------------------------ ------ --------
http://www.phpcake.cn/archives/tag/fsockopen
PHP には、独自のメソッドを使用するなど、リモート Web コンテンツを取得するさまざまな方法があります。 file_get_contents や fopen などの関数。


echo file_get_contents("http://img.jb51.net/abc.php");
?> ただし、DNS ではクエリなどの負荷分散では、同じドメイン名が複数のサーバー、複数のIPに対応する場合があります。 img.jb51.net は、DNS によって 72.249.146.213、72.249.146.214、および 72.249.146.215 の 3 つの IP に解決されると仮定します。ユーザーが img.jb51.net にアクセスするたびに、システムは、対応する負荷分散アルゴリズム。
先週、ビデオ プロジェクトに取り組んでいたときに、このような要件に遭遇しました。このサーバーの送信ステータスをクエリするために、各サーバー上の PHP インターフェイス プログラム (abc.php とします) にアクセスする必要がありました。

現時点では、file_get_contents を使用して http://img.jb51.net/abc.php に直接アクセスすることはできません。特定のサーバーに繰り返しアクセスし続ける可能性があるためです。

そして、http://72.249.146.213/abc.php、http://72.249.146.214/abc.php、http://72.249.146.215/abc.php に順番にアクセスする方法を使用して、こちら 3台のWebサーバーに複数の仮想ホストが搭載されている場合も不可です。

ホストは同じドメイン名に対応する複数の IP を設定できないため、ローカルホストを設定することはできません。

これは、PHP および HTTP プロトコルを通じてのみ実現できます。abc.php にアクセスするときに、ヘッダーに img.jb51.net ドメイン名を追加します。そこで、次の PHP 関数を作成しました。

コードをコピー コードは次のとおりです。


/************************
* 機能の使い方: 同一ドメイン名が複数のIPに対応する場合、指定したサーバーのリモートWebページのコンテンツを取得
* 作成時刻:2008-12-09
* 作成者: Zhang Yan (img.jb51.net)
* パラメータの説明:
* $ip サーバーの IP アドレス
* $host サーバーのホスト名
* $url サーバーの URL アドレス (ドメイン名を除く)
* 戻り値:
* リモート Web ページのコンテンツを取得しました
* false リモート Web にアクセスできませんでしたページ
******* *****************/
関数 HttpVisit($ip, $host, $url)
{
$errstr = '';
$errno = ''; 🎜> $fp = fsockopen ($ip, 80, $errno, $errstr, 90);
if (!$fp)
{
return false
}
else
{
$out = "GET {$url} HTTP/1.1rn";
$out .= "ホスト:{$host}rn";
$out .= "接続: closenrn";
fputs ($fp, $out);

while($line = fread($fp, 4096)){
$response .= $line>}
fclose; ( $ fp );

//ヘッダーヘッダー情報を削除します
$pos = strpos($response, "rnrn");
$response = substr($response, $pos 4); 🎜>
return $response;
}
}

//メソッドの呼び出し:
$server_info1 = HttpVisit("72.249.146.213", "img.jb51.net", "/abc.php");
$server_info2 = HttpVisit("72.249.146.214", "img.jb51.net", "/abc.php"); ", "img.jb51.net", "/abc.php");
?>


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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

See all articles