php抓取https的內容的代碼
大家有時候需要獲取https網頁的內容,下面得方法,可以參考下。就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!
直接用file_get_contents,會報錯;
複製代碼 代碼如下:
$url = (");
file_get_contents($url);
錯誤:
Warning: file_get_contents() [-get-contents]: failed to open stream: No such file or directory in D:wampwwwgrabber_ on line 3
用curl的方式是可以的:
複製代碼 代碼如下:
$url = ();
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$result = curl_exec($ch);
print_r($result);
?>
重點是以下兩句:
複製代碼 代碼如下:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
如對本文有疑問,請提交到交流社區,廣大熱心網友會爲你解答!! 點擊進入社區
爲方便說明,先上代碼吧
複製代碼 代碼如下:
/**
* curl POST
*
* @param string url
* @param array 數據
* @param int 請求超時時間
* @param bool HTTPS時是否進行嚴格認證
* @return string
*/
function curlPost($url, $data = array(), $timeout = 30, $CA = true){
$cacert = getcwd() . '/'; //CA根證書
$SSL = substr($url, 0, 8) == "https://" ? true : false;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout-2);
if ($SSL && $CA) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 只信任CA頒佈的證書
curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根證書(用來驗證的網站證書是否是CA頒佈)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 檢查證書中是否設置域名,並且是否與提供的主機名匹配
} else if ($SSL && !$CA) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何證書
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 檢查證書中是否設置域名
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:')); //避免data數據過長問題
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
//curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); //data with URLEncode
$ret = curl_exec($ch);
//var_dump(curl_error($ch)); //查看報錯信息
curl_close($ch);
return $ret;
}
如果URL地址是https打頭,那就走SSL,否則就走普通的HTTP協議。
是否走HTTPS的話就安全了嗎?其實SSL也有不同的驗證程度。
例如需不需要驗證證書中的公用名呢?(BTW:公用名(Common Name)一般來講就是填寫你將要申請SSL證書的域名 (domain)或子域名(sub domain)。)
需要驗證主機名嗎?
是任何證書都信任呢還是隻信任CA頒佈的呢?
(我擦嘞,電池快沒點了,只撿關鍵地兒說了 - -|||)
如果網站SSL證書買的是CA的(通常比較貴),那麼訪問時可以使用比較嚴格的認證,即:
複製代碼 代碼如下:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 只信任CA頒佈的.證書
curl_setopt($ch, CURLOPT_CAINFO, $cacert); // CA根證書(用來驗證的網站證書是否是CA頒佈)
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // 檢查證書中是否設置域名,並且是否與提供的主機名匹配
如果網站的證書是自己生成的,或者是網上的小機構申請的,那麼訪問時如果使用嚴格認證則不會通過,直接返回false。(對了,返回false時可以打印curl_error($ch)查看具體錯誤信息。)此時可以根據情況通過降低驗證程度來保證正常訪問,例如:
複製代碼 代碼如下:
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 信任任何證書
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1); // 檢查證書中是否設置域名(爲0也可以,就是連域名存在與否都不驗證了)
平時我們使用瀏覽器訪問各個https網站時,有時會遇到證書不受信的提示,其實就是因爲這些網站的證書不是正規CA機構頒佈的。
市面上各種瀏覽器中都內置了CA根證書列表信息,訪問有CA頒佈證書的網站時,會根據根證書驗證這些網站的證書,所以就不會有這個提示了。
關於CA根證書文件,其實就是包含了各個主要CA機構的公鑰證書,用來驗證網站的證書是否是這些機構頒發的。
這裏的這個文件是來源於mozilla的源碼樹,又轉換成PEM格式證書文件。(大家可以到這裏下載現成的)
最後說一個和SSL無關的東西:
複製代碼 代碼如下:
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
這個主要是爲了解決POST時數據過長問題
相關文章
-
php如何抓取https的內容的代碼
直接用file_get_contents,會報錯;複製代碼 代碼如下:$url = (");file_get_contents($url);錯誤:Waing: file_get_contents() [-get-contents]: failed to open stream: No such file or directory in D:wampwwwgrabber_ -
PHP實現抓取HTTPS內容
文章主要介紹了PHP實現抓取HTTPS內容,以及遇到的問題的解決方法,需要的朋友可以參考下。最近在研究Hacker News API時遇到一個HTTPS問題。因爲所有的Hacker News API都是通過加密的HTTPS協議訪問的,跟普通的協議不同,當 -
php下通過僞造http頭破解防盜鏈的代碼
文章主要用於圖片,軟件等突破防盜鏈的方法,希望需要的朋友有所幫助,但不推薦這樣做,如果官方改版都是無法繼續使用的。就跟隨本站小編一起去了解下吧,想了解更多相關信息請持續關注我們應屆畢業生考試網!僞造referer實例代 -
PHP中php://input和$-POST的區別
PHP是一門高效的網絡編程語言,由於它具有編寫靈活、運行快速等優點,迅速成爲Web程序員的首選語言。以下是小編爲大家搜索整理php中php://input和$_POST的區別,希望能給大家帶來幫助!更多精彩內容請及時關注我們應屆畢業 -
php中php://input和$-POST有什麼不同
php://input 允許讀取 POST 的原始數據。和 $HTTP_RAW_POST_DATA 比起來,它給內存帶來的壓力較小,並且不需要任何特殊的 設置。下面是小編爲大家帶來的php中php://input和$_POST有什麼不同的知識,歡迎閱讀。 php中ph -
php的curl實現get和post的代碼
類似於dreamhost這類主機服務商,是顯示fopen的使用的。使用php的curl可以實現支持FTP、FTPS、HTTP HTPPS SCP SFTP TFTP TELNET DICT FILE和LDAP。具體使用如下,更多消息請關注應屆畢業生網! curl 支持SSL證書、H -
asp.net 組合模式的PHP代碼
複製代碼 代碼如下:using System;using ric;using ;using ;namespace Test{class Program{static void Main(string[] args){var customer = new Customer{IsActive = true,LateFees = 100M,TotalRentNumber = 10};eL -
PHP生成SiteMap文件的代碼
一、全冊教學分析 1、 教材名稱、版本: 義務教育課程標準實驗教科書 數學 五年級(上 ) 2、全冊教材簡析: 本冊教材共編排了十個單元的教學內容。在“數與代數”領域教學負數的初步知識、小數的意義與性質、小數的四則計算,結 -
php自動生成sitemap地圖的代碼
如何生成sitemap地圖呢?本文分享一例php代碼,用於自動動態生成最新的sitemap地圖文件,並通知google網站地圖的更新,感興趣的`朋友參考下吧。 php自動生成sitemap地圖例子,:主要生成sitemap的類。代碼:複製代碼 代碼示例:< -
PHP生成SiteMap文件代碼的方法
分享一例php生成sitemap地圖文件的代碼,用於生成google sitemap地圖,有需要的'朋友參考學習下。例子:複製代碼 代碼示例:<?php/*** 生成sitemap文件* 平常在用的一段代碼,分享給大家* edit: */require_once('');