warning - php file_get_contents ssl
OPENSSL file_get_contents(): Error al habilitar crypto (2)
Ok, he encontrado una solución. El problema es que el sitio usa SSLv3. Y sé que hay algunos problemas en el módulo de openssl. Hace algún tiempo tuve el mismo problema con las versiones SSL.
<?php
function getSSLPage($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
var_dump(getSSLPage("https://eresearch.fidelity.com/eresearch/evaluate/analystsOpinionsReport.jhtml?symbols=api"));
?>
Cuando configura la versión SSL con curl a v3, entonces funciona.
Editar:
Otro problema en Windows es que no tiene acceso a los certificados. Así que ponga los certificados raíz directamente en curl.
http://curl.haxx.se/docs/caextract.html
aquí puede descargar los certificados raíz.
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/certs/cacert.pem");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
Entonces puede usar la opción CURLOPT_SSL_VERIFYPEER
con true
contrario, obtendrá un error.
Estoy construyendo una plataforma de stock personal (no distribuida). Un componente que me gustaría tener es el gráfico EPS en esta página:
Como puede ver, la página es https
, así que después de días de dar vueltas, habilité el openssl
y ahora parece funcionar para todas las páginas https
, como las páginas principales de Facebook y Twitter, sin embargo, todavía no funciona para el que yo necesitar.
file_get_contents(''https://facebook.com''); /* works */
file_get_contents(''https://twittercom''); /* works */
file_get_contents(''https://eresearch.fidelity.com/eresearch/evaluate/fundamentals/earnings.jhtml?stockspage=earnings&symbols=AAPL&showPriceLine=yes'');
Estoy recibiendo la advertencia:
Warning: file_get_contents(): SSL: crypto enabling timeout in C:/xampp/htdocs/index.php on line 3
Warning: file_get_contents(): Failed to enable crypto in C:/xampp/htdocs/index.php on line 3
Warning: file_get_contents(https://eresearch.fidelity.com/eresearch/evaluate/fundamentals/earnings.jhtml?stockspage=earnings&symbols=AAPL&showPriceLine=yes): failed to open stream: operation failed in C:/xampp/htdocs/index.php on line 3
Fatal error: Maximum execution time of 30 seconds exceeded in C:/xampp/htdocs/index.php on line 3
La única diferencia que puedo ver es que la página de fidelidad tiene un triángulo cerca de la etiqueta https.
Tenía el mismo problema: estaba en algún lugar del certificado de CA, así que usé el paquete CA utilizado para curl, y funcionó. Puede descargar el paquete curl ca aquí: https://curl.haxx.se/docs/caextract.html
Para problemas de encriptación y seguridad, vea este útil artículo:
https://www.venditan.com/labs/2014/06/26/ssl-and-php-streams-part-1-you-are-doing-it-wrongtm/432
Aquí está el ejemplo:
$url = ''https://www.example.com/api/list'';
$cn_match = ''www.example.com'';
$data = array (
''apikey'' => ''[example api key here]'',
''limit'' => intval($limit),
''offset'' => intval($offset)
);
// use key ''http'' even if you send the request to https://...
$options = array(
''http'' => array(
''header'' => "Content-type: application/x-www-form-urlencoded/r/n",
''method'' => ''POST'',
''content'' => http_build_query($data)
)
, ''ssl'' => array(
''verify_peer'' => true,
''cafile'' => [path to file] . "cacert.pem",
''ciphers'' => ''HIGH:TLSv1.2:TLSv1.1:TLSv1.0:!SSLv3:!SSLv2'',
''CN_match'' => $cn_match,
''disable_compression'' => true,
)
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
Espero que ayude