PHP抓取HTTPS內(nèi)容和錯(cuò)誤處理的方法
問(wèn)題
在研究Hacker News API的時(shí)候遇到一個(gè)HTTPS問(wèn)題。因?yàn)樗械腍acker News API都是通過(guò)加密的HTTPS協(xié)議訪問(wèn)的,跟普通的HTTP協(xié)議不同,當(dāng)使用PHP里的函數(shù) file_get_contents() 來(lái)獲取API里提供的數(shù)據(jù)時(shí),出現(xiàn)錯(cuò)誤
使用的代碼是這樣的:
<?php
$data = file_get_contents("/http://blog.it985.com/");
?>
當(dāng)運(yùn)行上面的代碼是遇到下面的錯(cuò)誤提示:
PHP Warning: file_get_contents(): Unable to find the wrapper “https” – did you forget to enable it when you configured PHP?
為什么會(huì)出現(xiàn)這樣的錯(cuò)誤?
在網(wǎng)上經(jīng)過(guò)一番搜索,發(fā)現(xiàn)遇到這樣錯(cuò)誤的人還不少,問(wèn)題很直接,是因?yàn)樵赑HP的配置文件里沒有開啟一個(gè)參數(shù),在我本機(jī)上是 /apache/bin/php.ini 里的 ;extension=php_openssl.dll 這一項(xiàng),需要將前面的分號(hào)去掉。
你可以用下面的腳本來(lái)檢查你的PHP環(huán)境的配置:
<?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);
運(yùn)行上面的這個(gè)腳本片段,在我的機(jī)器上得到的結(jié)果是:
<?php
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"
}
替代方案
發(fā)現(xiàn)錯(cuò)誤,改正錯(cuò)誤,這很簡(jiǎn)單,困難的是,發(fā)現(xiàn)錯(cuò)誤后無(wú)法改正錯(cuò)誤。我原本是想將這個(gè)腳本方法遠(yuǎn)程主機(jī)上,但我無(wú)法修改遠(yuǎn)程主機(jī)的PHP配置,結(jié)果是,我無(wú)法使用這一方案,但我們不能在一棵樹上吊死,這條路走不通,看看有沒有其它路。
另外一個(gè)我經(jīng)常用的PHP里抓取內(nèi)容的函數(shù)是 curl ,它比 file_get_contents() 更強(qiáng)大,提供了很多的可選參數(shù)。對(duì)于訪問(wèn) HTTPS 內(nèi)容的問(wèn)題,我們需要使用的 CURL 配置參數(shù)是:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
你可以從語(yǔ)義上看出,它是忽略/跳過(guò)了SSL安全驗(yàn)證。也許這不是一個(gè)很好的做法,但對(duì)于普通的場(chǎng)景中,這幾經(jīng)足夠了。
下面是利用 Curl 封裝的一個(gè)能訪問(wèn)HTTPS內(nèi)容的函數(shù):
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;
}
總結(jié)
以上就是PHP抓取HTTPS內(nèi)容和錯(cuò)誤處理方法的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或者使用PHP能有所幫助,如果有疑問(wèn)大家可以留言交流。
- PHP中PDO的錯(cuò)誤處理
- PHP中的錯(cuò)誤處理、異常處理機(jī)制分析
- php一些錯(cuò)誤處理的方法與技巧總結(jié)
- PHP 自定義錯(cuò)誤處理函數(shù)trigger_error()
- PHP 的異常處理、錯(cuò)誤的拋出及回調(diào)函數(shù)等面向?qū)ο蟮腻e(cuò)誤處理方法
- PHP 自定義錯(cuò)誤處理函數(shù)的使用詳解
- PHP 錯(cuò)誤處理機(jī)制
- PHP的全局錯(cuò)誤處理詳解
- php自定義錯(cuò)誤處理用法實(shí)例
- PHP嚴(yán)重致命錯(cuò)誤處理:php Fatal error: Cannot redeclare class or function
- 淺談PHP中的錯(cuò)誤處理和異常處理
- php實(shí)現(xiàn)的錯(cuò)誤處理封裝類實(shí)例
相關(guān)文章
PDF.js前端開發(fā)使用代碼示例及實(shí)用技巧
pdf.js是一款Nozilla開發(fā)的、用于網(wǎng)頁(yè)上顯示pdf文檔的Javascript庫(kù),提供pdf文件的在線閱讀,這篇文章主要給大家介紹了關(guān)于PDF.js前端開發(fā)使用實(shí)用技巧的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04
uniapp實(shí)現(xiàn)tabs切換(可滑動(dòng))效果實(shí)例
這篇文章主要給大家介紹了關(guān)于uniapp實(shí)現(xiàn)tabs切換(可滑動(dòng))效果的相關(guān)資料,tabs切換無(wú)論是在app端還是小程序或者H5頁(yè)面都是很常見的功能,文中通過(guò)實(shí)例代碼介紹的很詳細(xì),需要的朋友可以參考下2023-07-07
JavaScript之DOM插入更新刪除_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要為大家詳細(xì)介紹了JavaScript之DOM插入更新刪除,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07
用javascript實(shí)現(xiàn)讀取txt文檔的腳本
用javascript實(shí)現(xiàn)讀取txt文檔的腳本...2007-07-07
js eval函數(shù)使用,js對(duì)象和字符串互轉(zhuǎn)實(shí)例
下面小編就為大家?guī)?lái)一篇js eval函數(shù)使用,js對(duì)象和字符串互轉(zhuǎn)實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03

