我需要从使用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
答案 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,它会为您提供有关最近处理的转移的详细信息,以帮助您调试程序。