Maison  >  Article  >  développement back-end  >  Comment activer la cryptographie lors de l'utilisation de file_get_contents() avec des URL HTTPS spécifiques ?

Comment activer la cryptographie lors de l'utilisation de file_get_contents() avec des URL HTTPS spécifiques ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-23 12:17:30389parcourir

How to Enable Crypto When Using file_get_contents() with Specific HTTPS URLs?

Échec de l'activation du chiffrement lors de l'utilisation de file_get_contents() avec des URL HTTPS spécifiques

Lors de la tentative de récupération de contenu à partir de certaines URL HTTPS, telles que https ://eresearch.fidelity.com/, en utilisant file_get_contents(), vous pouvez rencontrer les erreurs suivantes :

Warning: file_get_contents(): SSL: crypto enabling timeout
Warning: file_get_contents(): Failed to enable crypto
Warning: file_get_contents(): failed to open stream: operation failed
Fatal error: Maximum execution time of 30 seconds exceeded

Solution :

Le problème vient du site Web cible utilisant le protocole SSLv3, qui n'est potentiellement pas pris en charge par votre configuration PHP.

Option 1 : Spécifiez la version SSL à l'aide de cURL

Créez une fonction à l'aide de cURL :

<code class="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); // Specify SSL version 3
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
}</code>

Exemple d'utilisation :

<code class="php">var_dump(getSSLPage("https://eresearch.fidelity.com/eresearch/evaluate/analystsOpinionsReport.jhtml?symbols=api"));</code>

Option 2 : Inclure les certificats racine dans Windows (facultatif)

Sous Windows, vous pouvez rencontrer un manque d'accès aux certificats racines. Pour résoudre ce problème, suivez ces étapes :

  • Téléchargez les certificats racine depuis http://curl.haxx.se/docs/caextract.html
  • Modifiez votre code cURL :
<code class="php">curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . "/certs/cacert.pem");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // True: verify certificates</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn