[英]How to make an HTTPS request using cURL?
我有2個PHP腳本,發送一個xml文件並捕獲它。 我正在使用cURL,一切都很好。 現在我嘗試做同樣的事情,但使用HTTP over SSL(HTTPS)。 我已經安裝了一個帶有XAMPP的本地服務器,我按照以下帖子設置了SSL:在本地xampp / apache服務器上設置SSL 。
我試圖像這樣發送xml文件:
<?php
/*
* XML Sender/Client.
*/
// Get our XML. You can declare it here or even load a file.
$xml = file_get_contents("data.xml");
// We send XML via CURL using POST with a http header of text/xml.
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
//i use this line only for debugging through fiddler. Must delete after done with debugging.
curl_setopt($ch, CURLOPT_PROXY, '127.0.0.1:8888');
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "https://ipv4.fiddler/iPM/receiver.php");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt($ch, CURLOPT_REFERER, 'https://ipv4.fiddler/iPM/receiver.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$ch_result = curl_exec($ch);
echo "Result = ".$ch_result;
curl_close($ch);
// Print CURL result.
?>
我從這里下載了cURL的新證書:
http://curl.haxx.se/ca/cacert.pem
我不知道我應該把證書放在哪里,但我把它放在我這個項目的工作區目錄中。
現在的問題是XML文件永遠不會發送到接收器。 有任何想法嗎?
您通過CURLOPT_CAINFO
傳遞給cURL的cacert.pem
用於驗證證書頒發機構,但開發服務器通常具有未包含在該捆綁包中的自簽名證書。
第一步是生成自己的自簽名證書。 本文逐步介紹了該過程。 確保在CSR生成期間,您使用Common Name (CN)
下的預期服務器名稱,例如ipv4.fiddler
。
使用自簽名證書(例如server.crt
)和密鑰(例如server.key
)配置Web服務器后,需要將前者復制到腳本可以訪問的位置。
以下幾個基本要素可用於驗證整個事情:
$ch = curl_init('https://ipv4.fidler');
curl_setopt_array($ch, array(
CURLOPT_SSL_VERIFYPEER => true,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_VERBOSE => true,
CURLOPT_CAINFO => '/path/to/server.crt',
));
if (false === curl_exec($ch)) {
echo "Error while loading page: ", curl_error($ch), "\n";
}
如果我想使用Curl
發送ssl
post請求,而不驗證證書,則可以使用以下代碼:
$data = array(
'name' => $name,
'ip' => $ip,
'text'=> "text"
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'https://myserver.com/index.php/');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS,
http_build_query($data));
// receive server response ...
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.