PHP による HTTPS Web ページのコンテンツ メソッドとエラー処理のクロール

WBOY
リリース: 2016-06-20 13:00:25
オリジナル
845 人が閲覧しました

HTTPS Web ページのコンテンツをクロールする PHP メソッドとエラー処理

最近、Hacker News API を調査中に HTTPS の問題に遭遇しました。すべての Hacker News API は通常の HTTP プロトコルとは異なる暗号化された HTTPS プロトコルを介してアクセスされるため、PHP の関数 file_get_contents() を使用して API で提供されるデータを取得すると、次のコードがエラーになります。 :

<?php
$data = file_get_contents("https://www.scutephp.com");
......
ログイン後にコピー

上記のコードを実行すると、次のエラー メッセージが表示されます:

PHP Warning:  file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?
ログイン後にコピー

このエラーはなぜ発生しますか?

インターネットで検索すると、多くの人がこのエラーに遭遇していることがわかりました。これは、私のローカル マシンの /apache/ で有効なパラメータがないことが原因です。 bin/php .ini 内の項目 ;extension=php_openssl.dll では、先行するセミコロンを削除する必要があります。次のスクリプトを使用して、PHP 環境の構成を確認できます:

$w = stream_get_wrappers();
echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
echo 'wrappers: ', var_dump($w);
ログイン後にコピー

上記のスクリプト スニペットを実行すると、私のマシンでの結果は次のようになります:

openssl: no
http wrapper: yes
https wrapper: no
wrappers: array(10) {
  [0]=>
  string(3) "php"
  [1]=>
  string(4) "file"
  [2]=>
  string(4) "glob"
  [3]=>
  string(4) "data"
  [4]=>
  string(4) "http"
  [5]=>
  string(3) "ftp"
  [6]=>
  string(3) "zip"
  [7]=>
  string(13) "compress.zlib"
  [8]=>
  string(14) "compress.bzip2"
  [9]=>
  string(4) "phar"
}
ログイン後にコピー

代替案

エラーを見つけて修正するのは非常に簡単です。難しいのは、エラーを見つけた後は修正できないことです。当初はこのスクリプト メソッドをリモート ホストに配置したかったのですが、リモート ホストの PHP 構成を変更できなかったので、このソリューションは使用できませんでしたが、ツリーにぶら下がっているわけにはいきません。この道はダメだ、他に方法はないのか?

PHP でコンテンツをキャプチャするために私がよく使用するもう 1 つの関数は、file_get_contents() よりも強力で、多くのオプションのパラメーターを提供します。 HTTPS コンテンツにアクセスする場合、使用する必要がある CURL 構成パラメーターは次のとおりです:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
ログイン後にコピー

SSL セキュリティ検証を無視/スキップしていることが意味的にわかります。これは良いアイデアではないかもしれませんが、通常のシナリオではこれで十分です。

以下は、HTTPS コンテンツにアクセスできる Curl によってカプセル化された関数です:

function getHTTPS($url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_HEADER, false);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_REFERER, $url);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
  $result = curl_exec($ch);
  curl_close($ch);
  return $result;
}
ログイン後にコピー


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート