ホームページ >バックエンド開発 >PHPチュートリアル >CURLの学習と応用(マルチスレッド実装)_PHPチュートリアル

CURLの学習と応用(マルチスレッド実装)_PHPチュートリアル

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

curl のインストール:

Windows でのインストール
: php.ini ファイルの設定を変更し、php_curl.dll を見つけます
//Uncomment extension=php_curl.dll
Linux でのインストール:

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

# wget http://curl.haxx.se/download/curl-7.17.1.tar.gz
# tar zxvfcurl-7.17.1.tar.gz //Unzip
#cdcurl-7.17.1
# ./configure –prefix=/usr/local/curl
# make
# make install


phpをインストールする前にインストールする方法です
****** ****** *******************phpinf 読み込みが成功したか確認してください!
curl の POST データを使用する Fetion インターフェイス
curl を使用して Fetion インターフェイスを作成します。これは単なるテストです
コードをコピーします コードは次のとおりです:
$username = 13800138000 ;
$password = 123456 ;
$sendto = 13912345678;
$message = "テストして試してみてください!";
$curlPost = 'username='.urlencode($username).'&password='.urlencode( $password).'&sendto='.urlencode($sendto).'&message='.urlencode($message).'';
$ch =curl_init();//curl
curl_setopt($ch,CURLOPT_URL,') を初期化しますhttp://sms.api.bz /fetion.php');//指定されたWebページをキャッチ
curl_setopt($ch, CURLOPT_HEADER, 0);//ヘッダーを設定
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//結果が文字列であり、画面に出力される必要があります。 Up
curl_setopt($ch, CURLOPT_POST, 1);//投稿送信メソッド
curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
$data =curl_exec($ch) ;//curl を実行します
curl_close($ch);
print_r($data);//出力結果


返される結果は次のとおりです: テキスト メッセージが送信キューに送信されました。
Fetion インターフェースのアドレスは http://sms.api.bz/
Fetion インターフェース モード:
http://sms.api.bz/fetion.php?username=your mobile Fetion ログイン電話番号
&password=your Mobile Fetion ログインパスワード
&sendto=SMS を受信するための Fetion 友人の携帯電話番号
&message=SMS コンテンツ
形式: http://sms.api.bz/fetion.php?username=13800138000&password=123456&sendto=13912345678&message=SMS コンテンツ
必ずUTF-8 形式のままにしておきます。この点で間違いがありました

curl メソッドを要約すると:

curl を初期化します

curl_setopt を使用してターゲット URL とその他のオプションを設定します。詳細については、これらのオプションとメソッドを参照してください。 http://cn2.php.net /manual/zh/ref.curl.php

curl_exec、curl を実行します

実行後、curl を閉じます
最後のステップは、
最も重要なcurl関数の1つであるcurl_getinfo
を出力することですcurl_getinfo ( resource $ch [, int $opt = 0 ] )


コードをコピーします コードは次のとおりです:
/*curlinstance
*/
$curl =curl_init ();
// クロールする必要がある URL を設定します
curl_setopt( $curl, CURLOPT_URL, 'http://www.baidu.com');
// ヘッダーを設定します
curl_setopt($curl, CURLOPT_HEADER, 0);
// 結果を文字列で保存するか画面に出力するように cURL パラメータを設定します。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
// cURL を実行し、Web ページをリクエストします
$data =curl_exec($curl);
if($data === false){
echocurl_error($curl); exit;
}
$info =curl_getinfo($curl);
// URL を閉じるリクエスト
curl_close($curl);

//取得したデータを表示

var_dump($info);
var_dump($data);



返せるもの:

URLINFO_EFFECTIVE_URL – 最後に有効な URL アドレス
CURLINFO_HTTP_CODE – 最後に受信した HTTP コード
CURLINFO_FILETIME – ドキュメントがリモートで取得された時刻。取得できない場合、戻り値は「-1」です
CURLINFO_TOTAL_TIME – 最後 転送にかかる時間
CURLINFO_NAMELOOKUP_TIME – 名前解決にかかる時間
CURLINFO_CONNECT_TIME – 接続の確立にかかる時間
CURLINFO_PRETRANSFER_TIME – 接続の確立から転送の準備までにかかる時間
CURLINFO_STARTTRANSFER_TIME –接続の確立から転送の開始までにかかる時間
CURLINFO_REDIRECT_TIME – トランザクション転送が開始されるまでのリダイレクトに費やした時間
CURLINFO_SIZE_UPLOAD – アップロードされたデータの合計量
CURLINFO_SIZE_DOWNLOAD – ダウンロードされたデータの合計量
CURLINFO_SPEED_DOWNLOAD – 平均ダウンロード速度
CURLINFO_SPEED_UPLOAD – 平均アップロード速度
C URLINFO_HEADER_SIZE – ヘッダー部分のサイズ
CURLINFO_HEADER_OUT – リクエストを送信する文字列
CURLINFO_REQUEST_SIZE – HTTP リクエスト内の該当のリクエストのサイズ
CURLINFO_SSL_VERIFYRESULT – によって返される SSL 証明書検証リクエストの結果CURLOPT_SSL_VERIFYPEER の設定
CURLINFO_CONTENT_LENGTH_DOWNLOAD – Content-Length から: フィールドに読み取られたダウンロード コンテンツの長さ
CURLINFO_CONTENT_LENGTH_UPLOAD - アップロードされたコンテンツのサイズの説明
CURLINFO_CONTENT_TYPE - Content-Type: ダウンロードされたコンテンツの値、NULL はサーバーが有効な Content-Type を送信しなかったことを意味します。ヘッダー

curl を使用してマルチスレッドを実現します

curl は通常 Web ページをクロールするために使用され、2 番目はデータを取得または投稿するために使用され、3 番目のアプリケーションは PHP でマルチスレッド タスクを実装するために使用されます
マルチスレッドを実装しましょう

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

/*
curl マルチスレッド クロール
*/
/**
*カールマルチスレッド
*
* @param array $ array平行url
* @param int $タイムアウトタイムアウト時間*/
function Curl_http($array,$timeout){
$res = array();
$mh = curl_multi_init();//複数のカールハンドルを作成します
$startime = getmicrotime();
foreach($array as $k=>$url){
$conn[$k]=curl_init($url);

curl_setopt ($conn[$k], CURLOPT_TIMEOUT, $timeout); // タイムアウトを設定します curl_setopt($conn[$k], CURLOPT_USERAGENT, 'Mozilla/5.0 (互換性; MSIE 5.01; Windows NT 5.0)'); ($ CONN [$ k], Curlopt_maxReders, 7); // http 方向レベル
CURL_SETOPT ($ CONN [$ k], Curlopt_header, 0); // 302 redirect
curl_setopt($conn[$k],CURLOPT_RETURNTRANSFER,1);
curl_multi_add_handle ($mh,$conn[$k]); この段落はインターネット上の書き込み方法に基づいています
do {
$mrc =curl_multi_exec($mh,$active);//データがない時はactive=true
} while ($mrc == CURLM_CALL_MULTI_PERFORM);//処理中、データ受け付け時
while ( $active および $mrc == CURLM_OK) {//データがない場合、またはリクエストが一時停止されている場合、active=true
if (curl_multi_select($mh) != -1) {
do {
$mrc =curl_multi_exec ($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);
}
}

foreach ($array as $k => $url) {
curl_error($conn[$k] ; ( $conn[$k]);//ハンドルを閉じる
curl_multi_remove_handle($mh, $conn[$k]) //リソースを解放する
}

curl_multi_close($mh);
$endtime = getmicrotime(); $diff_time = $endtime - $startime;

return array('diff_time'=>$diff_time,
'return'=>$res,
'header'=>$header
);

}
/ /現在時刻を計算する
function getmicrotime() {
list($usec, $sec) =explode(" ",microtime());
return ((float)$usec + (float)$sec);
}

//テストして、3 つの URL をカールします
$array = array(
"http://www.weibo.com/",
"http://www.renren.com/",
"http:// www .qq.com/"
);
$data = Curl_http($array,'10');//呼び出し
var_dump($data);//出力

?>



do while の説明:

$active は false になる前にすべての URL データが受信されるまで待機する必要があるため、ここではcurl_multi_exec の戻り値を使用してデータがまだあるかどうかを判断し、
データがある場合は停止しますcurl_multi_exec が呼び出されます。当面データがない場合は、新しいデータが到着すると、起動して実行を続行できます。
ここでの利点は、CPU の不必要な消費がなくなることです。さらに詳しい説明: http://hi.baidu.com/%D4%C2%D2%B9%C4%FD%ED%F8/blog/item/9dfcf4fbe6b84374024f563d.html

このマルチスレッドを作成する手順:
ステップ 1:curl_multi_init を呼び出す
ステップ 2:ループ内でcurl_multi_add_handleを呼び出す
このステップで注意する必要があるのは、curl_multi_add_handle の 2 番目のパラメーターが、curl_init のサブハンドルであるということです。
ステップ 3: 引き続きcurl_multi_execを呼び出します
ステップ 4: 必要に応じてループ内でcurl_multi_getcontentを呼び出し、結果を取得します
ステップ 5:curl_multi_remove_handleを呼び出し、単語ハンドルごとにcurl_closeを呼び出します
ステップ6:curl_multi_closeを呼び出します
マルチスレッドのテストレンダリング:

CURLの学習と応用(マルチスレッド実装)_PHPチュートリアル

概要: 36 の http リクエスト。実行の時系列順から判断すると、3 つの Web サイトの IP が交差しており、同時に同時であることがわかります。
——————————————————————————
Linuxコマンドでのcurl
いくつかの一般的な使用方法:
ダウンロード機能:
直接ダウンロードはwgetと同等
curl -o 1.jpg http://cgi2.tky.3web.ne.jp/~zzh/screen1.JPG
一括ダウンロード screen1.JPG–screen10.JPG
curl -O http://cgi2.tky.3web 。 ne.jp/~zzh/screen[1-10].JPG
ブレークポイントダウンロード
curl -c -O http://cgi2.tky.3wb.ne.jp/~zzh/screen1.JPG


リバースプロキシ機能
curl -x 123.45.67.89:1080 -o page.html http://www.yahoo.com
ヘッダーファイルを表示
curl -I www.sina.com

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/327381.html技術記事 Curl のインストール: Windows でのインストール: php.ini ファイルの設定を変更し、php_curl.dll を見つけます。 // 以下のコメントをキャンセルします。 extension=php_curl.dll Linux でのインストール: 次のようにコードをコピーします...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。