2014-03-04 99 views
1

我需要從使用https協議的服務器上的網頁(即https://site.com/page)獲取數據。這是我一直在使用PHP代碼:用PHP連接到https服務器

$POSTData = array(''); 
$context = stream_context_create(array(
    'http' => array(
    //'ignore_errors' => true, 
    'user_agent' => "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36", 
    'header' => "User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/522.11.1 (KHTML, like Gecko) Version/3.0.3 Safari/522.12.1", 
    'request_fulluri' => true, 
    'method' => 'POST', 
    'content' => http_build_query($POSTData), 
    ) 
)); 
$pageHTML = file_get_contents("https://site.com/page", FALSE, $context); 
echo $pageHTML; 

然而,這似乎並沒有工作,發出警告:的file_get_contents有關錯誤的信息。可能是這種情況,我如何解決它以連接到服務器並獲取頁面?

編輯:感謝大家誰回答,我的問題是,我使用的HTTP代理,我從代碼中刪除,以便它不會混淆你,因爲我認爲它不可能是問題。爲了使代碼通過一個HTTP代理服務器加載HTTPS網頁,我修改我用這樣的stream_context_create:

stream_context_create(array(
    'https' => array(
    //...etc 
+0

錯誤信息的確切文字是什麼? – thatidiotguy

回答

1

Have a look at cURL,如果你還沒有準備好。使用cURL,您可以遠程訪問網頁/ API /文件並將其下載到您的服務器。該curl_setopt()函數允許您指定是否要驗證遠程服務器的證書

$file = fopen("some/file/directory/file.ext", w); 
$ch = curl_init("https://site.com/page"); 
curl_setopt($ch, CURLOPT_FILE, $file); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //false to disable the cert check if needed 

$data = curl_exec($ch); 
curl_close($ch); 
fclose($file); 

喜歡的東西,可以讓你連接到HTTPS服務器,然後下載所需的文件。如果您知道服務器具有有效證書(即您沒有在沒有有效證書的服務器上開發),則可以省略curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);一行,因爲默認情況下cURL將嘗試驗證證書。

cURL也有the curl_getinfo() function,它會爲您提供有關最近處理的傳輸的詳細信息,這些傳輸將幫助您調試程序。