3

HTTPページのWebサイトからHTTPSページの別のWebサイトに暗号化された変数を送信しようとしています。これを実現するために使用しているコードは、次のとおりです。

$VARIABLE = 'myvariable';

function do_post_request($url, $data, $optional_headers = null)
{
  $params = array('http' => array(
              'method' => 'POST',
              'content' => $data
            ));
  if ($optional_headers !== null) {
    $params['http']['header'] = $optional_headers;
  }
  $ctx = stream_context_create($params);
  $fp = @fopen($url, 'rb', false, $ctx);
  if (!$fp) {
    throw new Exception("Problem with $url, $php_errormsg");
  }
  $response = @stream_get_contents($fp);
  if ($response === false) {
    throw new Exception("Problem reading data from $url, $php_errormsg");
  }
  return $response;
}

do_post_request('https://localhost/myphpfile.php', $VARIABLE);

これはHTTPでは完全に機能しますが、HTTPSでは機能しませんが、これは、接続が拒否される原因となるWAMPを実行しているローカルサーバーを使用しているためだと思います。

とにかく私の質問は、データが渡されるようにするために「myphpfile」に何が必要かということです。

前もって感謝します!

更新:うわー、すべての迅速な返信の人に感謝します!あなたの多くが提案したように、私はちょうどcURLをざっと見て、これがグーグルでうそをついているのを見つけました:

$url = 'https://localhost/myphpfile.php';

// Initialize session and set URL.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);

// Set so curl_exec returns the result instead of outputting it.
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);

// Get the response and close the channel.
$response = curl_exec($ch);
curl_close($ch);

VERIFYHOSTパラメータが原因で有効な証明書がチェックされないことはわかっていますが、テストサーバーから移動するまで待ってから取得すると思いますが、データを取得する方法を教えてください。 'myphpfile'に送信されましたか?

4

3 に答える 3

1

cURLコードに基づいて、curl_exec()電話をかける前に次の行を追加する必要があります。

// number of POST variables you're passing - your number will likely be different
curl_setopt($ch,CURLOPT_POST,3);
// the post variables themselves - make sure the above number matches the number
// of fields here
curl_setopt($ch,CURLOPT_POSTFIELDS,"field1=foo&field2=bar&field3=baz");
于 2012-04-04T20:48:17.250 に答える
0

WAMP(Windows?!?)はポート443でSSL接続をリッスンしていますか?そうであり、HTTPサイトと同様の方法でスクリプトを適切に提供するようにWebサーバー構成を設定している場合は、正常に機能するはずです。

また、PHPがサーバーの証明書を検証していることを確認するために、フープをジャンプする必要があります。そうしないと、基本的に中間者攻撃が有効になり、SSLを使用するというポイント全体が無効になります。cURLはこれに役立ちます。

于 2012-04-04T19:39:19.937 に答える
0

ポート443でリッスンするようにappachehttpd.confファイルでSSLベースの仮想サーバーを構成する必要があります。サーバーが使用するSSL証明書も作成する必要があります。

SSL証明書を作成し、ApacheSSLベースの仮想サーバーを構成するためのチュートリアルがオンラインにたくさんあります。

于 2012-04-04T19:42:12.460 に答える