ホームページ  >  記事  >  バックエンド開発  >  PHP ベースの cURL のクイック スタート 1

PHP ベースの cURL のクイック スタート 1

WBOY
WBOYオリジナル
2016-06-13 13:04:31772ブラウズ

PHP 1 ベースの cURL によるクイックスタート

cURL は、URL 構文を使用してファイルやデータを転送するツールで、HTTP、FTP、TELNET などの多くのプロトコルをサポートしています。最も優れた点は、PHP が cURL ライブラリもサポートしていることです。この記事では、cURL の高度な機能と、それを PHP で使用する方法を紹介します。

なぜ cURL を使用するのですか?

はい、他の方法で Web コンテンツを取得できます。ほとんどの場合、私は怠けたいので、単純な PHP 関数を使用するだけです:


以下は引用された内容です:

$content = file_get_contents("http://www.nettuts.com");
// or
$lines = file("http://www.nettuts.com");
// or
readfile(http://www.nettuts.com);
?



ただし、このアプローチには柔軟性と効果的なエラー処理が欠けています。さらに、Cookie の処理、検証、フォームの送信、ファイルのアップロードなど、いくつかの難しいタスクを完了するために使用することはできません。

引用:
cURL は、さまざまなプロトコルとオプションをサポートし、URL リクエストに関連するさまざまな詳細を提供できる強力なライブラリです。

基本構造

より複雑な関数を学ぶ前に、PHP で cURL リクエストを確立するための基本的な手順を見てみましょう:
初期化
変数の設定
実行と結果を取得します
cURL ハンドルを解放します


以下は引用された内容です:

// 1. 初始化
$ch = curl_init();
// 2. 设置选项,包括URL
curl_setopt($ch, CURLOPT_URL, "http://www.nettuts.com");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
// 3. 执行并获取HTML文档内容
$output = curl_exec($ch);
// 4. 释放curl句柄
curl_close($ch);
?


2 番目のステップ (つまり、curl_setopt()) が最も重要であり、すべての秘密がここにあります。 URL リクエストのさまざまな詳細を指定する、設定できる cURL パラメーターの長いリストがあります。これらをすべて一度に読んで理解するのは難しい場合があるため、今日はより一般的で便利なオプションのみを試します。

エラーのチェック

エラーをチェックするステートメントを追加できます (これは必須ではありません):


以下は引用された内容です:

// ...
$output = curl_exec($ch);
if ($output === FALSE) {
echo "cURL Error: " . curl_error($ch);
}
// ...
?



比較する場合、「== FALSE」ではなく「=== FALSE」を使用することに注意してください。空の出力とブール値 FALSE (実際のエラー) を区別する必要があるためです。

?

情報の取得

これは、cURL の実行後にこのリクエストに関する情報を取得できる別のオプションの設定です:


以下は引用された内容です:

// ...
curl_exec($ch);
$info = curl_getinfo($ch);
echo '获取'. $info['url'] . '耗时'. $info['total_time'] . '秒';
// ...
?



返される配列には次の情報が含まれます:
"url" //リソース ネットワーク アドレス
"content_type" //コンテンツ エンコーディング
"http_code" // HTTP ステータスコード
"header_size" //ヘッダーサイズ
"request_size" //リクエストサイズ
"filetime" //ファイル作成時間
"ssl_verify_result" //SSL 検証結果
"redirect_count " //ジャンプテクノロジー
"total_time" //合計時間消費
"namelookup_time" //DNSクエリ時間消費
"connect_time" //接続待機時間消費
"pretransfer_time" //準備送信までの時間
"size_upload" //アップロードデータのサイズ
"size_download" //ダウンロードデータのサイズ
"speed_download" //ダウンロード速度
"speed_upload" //アップロード速度
"download_content_length" //ダウンロードされたコンテンツの長さ
"upload_content_length" //アップロードされたコンテンツの長さ
"starttransfer_time" //転送を開始する時間
"redirect_time" //リダイレクト時間

ブラウザベースのリダイレクト

最初の例では、サーバーにブラウザベースのリダイレクトがあるかどうかを検出するコードを提供します。たとえば、一部の Web サイトは、モバイル ブラウザであるかどうか、さらにはユーザーの出身国に基づいて Web ページをリダイレクトします。

CURLOPT_HTTPHEADER オプションを使用して、ユーザー エージェント情報やデフォルト言語など、送信する HTTP リクエスト ヘッダー (http ヘッダー) を設定します。次に、これらの特定の Web サイトが別の URL にリダイレクトするかどうかを確認します。

以下は引用内容です:

// 测试用的URL
$urls = array(
"http://www.cnn.com",
"http://www.mozilla.com",
"http://www.facebook.com"
);
// 测试用的浏览器信息
$browsers = array(
"standard" => array (
"user_agent" => "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6 (.NET CLR 3.5.30729)",
"language" => "en-us,en;q=0.5"
),
"iphone" => array (
"user_agent" => "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A537a Safari/419.3",
"language" => "en"
),
"french" => array (
"user_agent" => "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB6; .NET CLR 2.0.50727)",
"language" => "fr,fr-FR;q=0.5"
)
);
foreach ($urls as $url) {
echo "URL: $url\n";
foreach ($browsers as $test_name => $browser) {
$ch = curl_init();
// 设置 url
curl_setopt($ch, CURLOPT_URL, $url);
// 设置浏览器的特定header
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"User-Agent: {$browser['user_agent']}",
"Accept-Language: {$browser['language']}"
));
// 页面内容我们并不需要
curl_setopt($ch, CURLOPT_NOBODY, 1);
// 只需返回HTTP header
curl_setopt($ch, CURLOPT_HEADER, 1);
// 返回结果,而不是输出它
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
// 有重定向的HTTP头信息吗?
if (preg_match("!Location: (.*)!", $output, $matches)) {
echo "$test_name: redirects to $matches[1]\n";
} else {
echo "$test_name: no redirection\n";
}
}
echo "\n\n";
}
?


まず、テストする必要がある URL のセットを作成し、次にテストする必要があるブラウザー情報のセットを指定します。最後に、ループを使用して、発生する可能性のあるさまざまな URL とブラウザの一致状況をテストします。

cURL オプションを指定したため、返される出力コンテンツには HTTP ヘッダー情報 ($output に保存される) のみが含まれます。単純な規則ルールを使用して、ヘッダー情報に「Location:」という単語が含まれているかどうかを確認します。

このコードを実行すると、次の結果が返されるはずです:




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