使用PHP连接到https服务器

时间:2014-03-04 18:10:06

标签: php https file-get-contents

我需要从使用https协议的服务器上的网页获取数据(即https://site.com/page)。这是我一直在使用的PHP代码:

$POSTData = array('');
$context = stream_context_create(array(
    'http' => array(
    //'ignore_errors' => true,
    'user_agent' => "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36",
    'header' => "User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en) AppleWebKit/522.11.1 (KHTML, like Gecko) Version/3.0.3 Safari/522.12.1",
    'request_fulluri' => true,
    'method'  => 'POST',
    'content' => http_build_query($POSTData),
    )
));
$pageHTML = file_get_contents("https://site.com/page", FALSE, $context);
echo $pageHTML;

但是,这似乎不起作用,发出警告:file_get_contents,但没有关于错误的信息。可能是这种情况,我如何解决它连接到服务器并获取页面?

编辑:感谢所有回答的人,我的问题是我使用的是HTTP代理,我从代码中删除了它,这样就不会让你感到困惑,因为我认为这不可能是问题所在。为了使代码通过HTTP代理加载HTTPS页面,我修改了我使用的stream_context_create,如下所示:

    stream_context_create(array(
    'https' => array(
    //...etc

1 个答案:

答案 0 :(得分:1)

Have a look at cURL如果你还没有。使用cURL,您可以远程访问网页/ API /文件并将其下载到您的服务器。 curl_setopt()函数允许您指定是否验证远程服务器的证书

$file = fopen("some/file/directory/file.ext", w);
$ch   = curl_init("https://site.com/page");
curl_setopt($ch, CURLOPT_FILE, $file);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //false to disable the cert check if needed

$data = curl_exec($ch);
curl_close($ch);
fclose($file);

这样的东西将允许您连接到HTTPS服务器,然后下载所需的文件。如果您知道服务器具有有效证书(即您没有在没有有效证书的服务器上进行开发),那么您可以省略curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);行,因为cURL将尝试通过以下方式验证证书:默认值。

cURL还有the curl_getinfo() function,它会为您提供有关最近处理的转移的详细信息,以帮助您调试程序。