J'ai un projet PHP Laravel5. J'utilise file_get_contents() dans l'action d'un contrôleur comme suit:

$production = json_decode(file_get_contents(url('/operation/get-production/'.$job->id)))->production;

La route ci-dessus est exclue de l'authentification et de l'autorisation et la ligne de code ci-dessus fonctionne bien depuis l'hôte local . Cependant, lorsqu'un utilisateur distant d'Internet utilise ce code, il génère l'erreur suivante:

enter image description here

Je n'utilise pas IIS, le serveur est Apache sur Ubuntu Linux. Je ne sais pas pourquoi SSL est apparu dans ce cas? Je suis presque sûr que l'URL fournie à la fonction n'est http://... pas https://...

0
SaidbakR 23 nov. 2017 à 18:32

3 réponses

Meilleure réponse

Il semble que la vérification du certificat échoue car il ne dispose pas d'un fichier de référence de certificats racine pour le vérifier. Consultez cette réponse Stack Overflow.

0
starbeamrainbowlabs 23 nov. 2017 à 15:35

Vous avez 2 situations possibles:

Réponse possible n ° 1, si vous utilisez apache, vérifiez votre configuration et voyez si votre domaine ne force pas tous les appels à utiliser SSL

  • OU -

Réponse possible n ° 2, vous devez créer un flux pour votre URL GET et envoyer des en-têtes à l'autre serveur:

<?php //Create a flow 
$opt = array(
'http'=>array(
'method'=>'GET',
'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7) Gecko/20040803 Firefox/0.9.3',
'header'=>'Accept-language: en\r\n' .
                 'Cookie: foo=bar\r\n’ ) ); 
$context = stream_context_create($opt); 
//Get external url response
$file = file_get_contents('http://www.example.com/some_file', false, $context); ?>
0
Crythephoenix 23 nov. 2017 à 16:34

Votre URL de production peut être obligée d'utiliser https (et c'est une bonne chose).

File_get_contents () n'est pas le choix parfait pour obtenir des données via https, mais si l'extension php_openssl est activée et que vous permettez à_url_fopen de définir sur "on", vous pouvez obtenir du contenu depuis https.

Comme vous semblez ne pas avoir de certificat SSL valide: utiliser PHP Curl doit être une meilleure idée (http://php.net/manual/fr/book.curl.php), car vous pouvez désactiver l'erreur SSL avec ceci:

curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

(si vous faites confiance à l'URL: vous pouvez le faire, ne le faites jamais avec un site Web externe)

2
Bacteries 23 nov. 2017 à 15:41
47458924