3

xml ファイルを送信してキャッチするための 2 つの php スクリプトがあります。私は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 ファイルが受信者に送信されないことです。何か案は?

4

2 に答える 2

7

cacert.pemを介してcURLに渡すものはCURLOPT_CAINFO、認証局を検証するために使用されますが、開発サーバーには通常、そのバンドルに含まれていない自己署名証明書があります。

最初のステップは、独自の自己署名証明書を生成することです。この記事では、プロセスを段階的に説明します。CSRの生成中にCommon Name (CN)、たとえば、の下で目的のサーバー名を使用していることを確認してくださいipv4.fiddler

server.crt自己署名証明書(eg )とキー(eg )を使用してWebサーバーを構成したらserver.key、スクリプトがアクセスできる場所に前者をコピーする必要があります。

以下の最低限の必需品を使用して、すべてを検証できます。

$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";
}
于 2013-01-22T02:14:03.437 に答える