国产探花免费观看_亚洲丰满少妇自慰呻吟_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://m.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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 淮北市| 紫阳县| 阿尔山市| 昭平县| 沙田区| 英山县| 白山市| 喀喇沁旗| 天等县| 松溪县| 兴文县| 兴海县| 平江县| 双峰县| 浏阳市| 高青县| 日喀则市| 阿拉善右旗| 镇远县| 蒲江县| 安达市| 舒兰市| 林芝县| 历史| 河西区| 永定县| 宣威市| 耿马| 竹溪县| 铜川市| 元氏县| 水富县| 梁河县| 安岳县| 荥经县| 张家口市| 安宁市| 专栏| 普洱| 根河市| 会昌县|