2010-02-21 145 views

回答

4

通過curl向HTTPS URL發送請求並不是那麼難,就PHP代碼而言。

像這樣的東西應該做的非常精細(我只是嘗試這個代碼部分我的機器上,Windows中,PHP 5.3)

$url = 'https://.../...'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$data = curl_exec($ch); 
curl_close($ch); 

echo $data; 

而且它的結果罰款輸出:我得到同樣的事情在我的瀏覽器中嘗試訪問https://網址;當然,除了CSS之外。


你可能想看看curl_setopt功能的手冊頁:有很多的選項,其中一些可能是有用的,在特定情況下:-)

這裏,我用CURLOPT_SSL_VERIFYPEERCURLOPT_SSL_VERIFYHOST;不確定你是否需要亞馬遜,但我不得不使用它們,否則這部分代碼不起作用 - 但這可能與我正在使用的證書是自簽名的事實有關。嘗試使用和不使用這些,你會很快發現你是否需要它們。

+0

url http:// ...? – Sarfraz 2010-02-21 14:47:12

+0

@Sarfraz> ergh,該死的複製粘貼*(我從我的瀏覽器中複製粘貼了一個URL,但沒有注意到它沒有像我以前的服務器那樣添加's')* ;;我已經編輯了我的答案以糾正錯誤;感謝您的評論:-) – 2010-02-21 14:54:25

+0

歡迎您:) – Sarfraz 2010-02-21 14:55:41

12

實施例:

$url = "https://example.com"; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

$result = curl_exec($ch); 
curl_close($ch); 

print_r($result); 

CURLOPT_SSL_VERIFYPEER

檢查對方的證書是有效還是無效/過期。

CURLOPT_SSL_VERIFYHOSTphp manual引述:

1來檢查一個共同 名存在的對等體的SSL證書中。 2到 檢查是否存在通用名稱 ,並驗證它是否與所提供的 主機名匹配。

+0

您能否描述爲什麼需要SSL_VERIFYPEER和SSL_VERIFYHOST? – 2010-02-21 14:50:28

+0

我編輯了我的答案。 – rogeriopvl 2010-02-21 14:57:41

2

如果要配置CURL以盲目接受證書,可以將CURLOPT_SSL_VERIFYPEER選項設置爲false。

$url = 'https://www.example.com/abc'; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

// Blindly accept the certificate 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

$response = curl_exec($ch); 
curl_close($ch); 

var_dump($response); 
1

您也可以使用Zend Framework和cURL適配器來幫助完成此任務。詳情here