使用HTTP从网站发送数据并使用HTTPS接收

时间:2012-04-04 19:31:55

标签: php http post 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'需要什么才能将数据传递给它?

提前致谢!

更新:哇,谢谢所有快速回复的人!像你们许多人建议的那样,我只是快速浏览一下cURL并发现它存在于Google中:

$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'?

3 个答案:

答案 0 :(得分: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");

答案 1 :(得分:0)

WAMP(Windows?!?)是否正在侦听端口443上的SSL连接?如果是,并且您的Web服务器配置设置为以类似于HTTP站点的方式正确提供脚本,那么它应该可以正常工作。

您还需要跳过箍以确保PHP验证服务器的证书。如果不这样做,您基本上可以实现中间人攻击,从而打败使用SSL的整个过程。 cURL可以为此提供帮助。

答案 2 :(得分:0)

您需要在appache httpd.conf文件中配置基于SSL的虚拟服务器以侦听端口443.您还需要为要使用的服务器创建SSL证书。

网上有很多教程用于创建SSL证书和配置基于Apache SSL的虚拟服务器