2012-04-04 11 views
3

HTTPSページのウェブサイトからHTTPSページの別のウェブサイトに暗号化された変数を送信しようとしています。これを達成するために使用しているコードはHTTPからのウェブサイト間でのデータの送信とHTTPSでの受信

です
$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'に何が必要なのですか?

ありがとうございます!

更新日:すごい、すべての素人回答に感謝します!

$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パラメータは、それが有効な証明書をチェックしていない原因になっている知っているが、私は、私は思う:あなたの多くと同じように、私はただのcURLを簡単に見取り、これをGoogleに転がっ見つけた提案私はテストサーバーを離れてから、私は1つを取得しますが、あなたは私が 'myphpfile'に送信されているデータを取得することができます教えていただけますか?

+0

これはApacheですか?もしそうなら、 'mod_ssl'モジュールもロードされていますか? –

+0

@Khôi:WAMP - Windows Apache MySQL PHP。しかし、私は単純なcURL呼び出しを行うのではなく、なぜaskerが 'stream_get_contents()'を使用しているのか、さらに詳しく知りたいと思っています。また、 'https:// localhost/myphpfile.php'を参照するだけですか?あなたのブラウザでうまく動作しない場合、あなたのコードでは動作しません。 – Crontab

+0

カールを使用していない理由がありますか? –

答えて

1

ビルApacheのSSLベースの仮想サーバーを構成するためにありますが、あなたが本当に自分の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"); 
+0

ありがとう、私は$ HTTP_POST_VARS ['field1']を使ってテストとして 'foo'を取得しようとしましたが、代わりに 'Undefined variable'エラーが出ました。 –

+0

@SamJackson:長い変数名の使用は廃止されました(私は信じています)。 POST var '" field1 "'を取得するには '$ _POST [" field1 "]'を使用し、私の例の場合は '" foo "'を取得します。 – Crontab

+1

素晴らしい作品です、ありがとうございました! –

0

WAMP(Windows?!)はポート443でSSL接続をリッスンしていますか?そうであれば、HTTPサイトに類似した方法でスクリプトを適切に処理するようにWebサーバーの設定をしておけば、うまくいくはずです。

また、PHPがサーバーの証明書を検証していることを確認するために、フープを飛ばしていく必要があります。そうしないと、基本的にman-in-the-middle攻撃が可能になり、SSL使用の全面的なポイントを打ち破ることになります。 cURLはこれを助けることができます。

0

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

たくさんのチュートリアルのオンラインは、SSL証明書をcreratingし、あなたのcURLのコードに

関連する問題