如何让 file_get_content()使用 HTTPS?

我正在设置信用卡处理,需要使用 CURL 的变通方法。下面的代码在我使用测试服务器时工作得很好(它没有调用 SSL URL) ,但是现在当我在使用 HTTPS 的工作服务器上测试它时,出现了错误消息“未能打开数据流”。

function send($packet, $url) {
$ctx = stream_context_create(
array(
'http'=>array(
'header'=>"Content-type: application/x-www-form-urlencoded",
'method'=>'POST',
'content'=>$packet
)
)
);
return file_get_contents($url, 0, $ctx);
}
335885 次浏览

这可能是由于您的目标服务器没有有效的 SSL 证书。

从 PHP4.3.0开始支持 HTTPS,如果您已经编译以支持 OpenSSL 的话。 另外,确保目标服务器有一个有效的证书,防火墙允许出站连接,php.ini 中的 allow_url_fopen设置为 true。

Try the following script to see if there is an https wrapper available for your php scripts.

$w = stream_get_wrappers();
echo 'openssl: ',  extension_loaded  ('openssl') ? 'yes':'no', "\n";
echo 'http wrapper: ', in_array('http', $w) ? 'yes':'no', "\n";
echo 'https wrapper: ', in_array('https', $w) ? 'yes':'no', "\n";
echo 'wrappers: ', var_export($w);

输出应该是

openssl: yes
http wrapper: yes
https wrapper: yes
wrappers: array(11) {
[...]
}

有时,服务器会根据它在 http 请求头中看到或没有看到的内容(比如适当的用户代理)选择不响应。如果可以与浏览器连接,请获取它发送的标头并在流上下文中模拟它们。

我有同样的错误。设置 allow_url_include = Onphp.ini为我修复它。

To allow https wrapper:

  • php_openssl扩展必须存在并被启用
  • 必须将 allow_url_fopen设置为 on

在 php.ini 文件中,如果不存在,应该添加以下代码行:

extension=php_openssl.dll


allow_url_fopen = On

试试以下方法。

function getSslPage($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}

注意: 这将禁用 SSL 验证,这意味着提供的安全性 < strong > by HTTPS is lost. Only use this code for testing / local 从没在网上看过或其他面向公众的 networks. If this code works, it means the SSL certificate isn't 信任的或无法验证的,您应该将其作为 另一个问题。

在我的例子中,问题是由于 WAMP 对 CLI 使用了不同于 Apache 的 php.ini,所以通过 WAMP 菜单进行的设置不适用于 CLI。只要修改 CLI php.ini 就可以了。

只需在 php.ini 文件中添加两行。

extension=php_openssl.dll

allow_url_include = On

对我很有效。

$url= 'https://example.com';


$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);


$response = file_get_contents($url, false, stream_context_create($arrContextOptions));

这将允许您从 URL 获取内容,无论它是否是 HTTPS

我在 IIS 上遇到了不能使用的 https。解决办法是:

File _ get _ content (‘ https. .)不会加载。

  • 下载 https://curl.haxx.se/docs/caextract.html
  • install under ..phpN.N/extras/ssl
  • 使用以下命令编辑 php.ini:

    Cainfo = “ C: Program Files PHP v7.3 plus ssl ccert.pem” Cafile = “ C: Program Files PHP v7.3  外加 ssl ccert.pem”

终于!

使用以下代码:

$homepage = file_get_contents("https://www.google.com",false,
stream_context_create([
'ssl'  => [
'verify_peer'      => false,
'verify_peer_name' => false,
]
])
);
    

echo $homepage;