国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

PHP實現抓取HTTPS內容的方法和錯誤處理

2024-05-04 21:49:59
字體:
來源:轉載
供稿:網友

下面我們來看一篇關于PHP實現抓取HTTPS內容的方法和錯誤處理的教程希望這篇教程能夠幫助到各位朋友.

最近在研究Hacker News API時遇到一個HTTPS問題,因為所有的Hacker News API都是通過加密的HTTPS協議訪問的,跟普通的HTTP協議不同,當使用PHP里的函數 file_get_contents() 來獲取API里提供的數據時,出現錯誤,使用的代碼是這樣的:

  1. <?php 
  2. $data = file_get_contents("http://www.survivalescaperooms.com/son?print=pretty"); 
  3. ...... 

當運行上面的代碼是遇到下面的錯誤提示:

PHP Warning:  file_get_contents(): Unable to find the wrapper "https" - did you forget to enable it when you configured PHP?

為什么會出現這樣的錯誤:

在網上經過一番搜索,發現遇到這樣錯誤的人還不少,問題很直接,是因為在PHP的配置文件里沒有開啟一個參數,在我本機上是 /apache/bin/php.ini 里的 ;extension=php_openssl.dll 這一項,需要將前面的分號去掉。你可以用下面的腳本來檢查你的PHP環境的配置:

  1. $w = stream_get_wrappers(); 
  2. echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no'"/n"
  3. echo 'http wrapper: ', in_array('http'$w) ? 'yes':'no'"/n"
  4. echo 'https wrapper: ', in_array('https'$w) ? 'yes':'no'"/n"
  5. echo 'wrappers: ', var_dump($w); 

運行上面的這個腳本片段,在我的機器上得到的結果是:

  1. openssl: no 
  2. http wrapper: yes 
  3. https wrapper: no 
  4. wrappers: array(10) { 
  5.   [0]=> 
  6.   string(3) "php" 
  7.   [1]=> 
  8.   string(4) "file" 
  9.   [2]=> 
  10.   string(4) "glob" 
  11.   [3]=> 
  12.   string(4) "data" 
  13.   [4]=> 
  14.   string(4) "http" 
  15.   [5]=> 
  16.   string(3) "ftp" 
  17.   [6]=> 
  18.   string(3) "zip" 
  19.   [7]=> 
  20.   string(13) "compress.zlib" 
  21.   [8]=> 
  22.   string(14) "compress.bzip2" 
  23.   [9]=> 
  24.   string(4) "phar" 

替代方案:

發現錯誤,改正錯誤,這很簡單,困難的是,發現錯誤后無法改正錯誤,我原本是想將這個腳本方法遠程主機上,但我無法修改遠程主機的PHP配置,結果是,我無法使用這一方案,但我們不能在一棵樹上吊死,這條路走不通,看看有沒有其它路.

另外一個我經常用的PHP里抓取內容的函數是 curl,它比 file_get_contents() 更強大,提供了很多的可選參數,對于訪問 HTTPS 內容的問題,我們需要使用的 CURL 配置參數是:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

你可以從語義上看出,它是忽略/跳過了SSL安全驗證,也許這不是一個很好的做法,但對于普通的場景中,這幾經足夠了.

下面是利用 Curl 封裝的一個能訪問HTTPS內容的函數:

  1. function getHTTPS($url) { 
  2.   $ch = curl_init(); 
  3.   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
  4.   curl_setopt($ch, CURLOPT_HEADER, false); 
  5.   curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
  6.   curl_setopt($ch, CURLOPT_URL, $url); 
  7.   curl_setopt($ch, CURLOPT_REFERER, $url); 
  8.   curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 
  9.   $result = curl_exec($ch); //Vevb.com 
  10.   curl_close($ch); 
  11.   return $result

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东乌| 天等县| 镇赉县| 马尔康县| 和龙市| 日喀则市| 邢台市| 共和县| 乌兰察布市| 如皋市| 昭觉县| 双峰县| 南乐县| 乌兰察布市| 湖南省| 曲麻莱县| 隆子县| 佛坪县| 阜宁县| 洛宁县| 深水埗区| 富阳市| 奎屯市| 乌审旗| 太白县| 陇南市| 师宗县| 卫辉市| 石嘴山市| 达拉特旗| 台山市| 内江市| 石阡县| 通化市| 贵定县| 肥东县| 陆川县| 嘉义县| 临沭县| 周宁县| 安义县|