簡體   English   中英

如何使用cURL發出HTTPS請求?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM