Bouffer et HTTPS
Je veux utiliser Bouffer et Silex à envoyer la demande aux pages https.
Avec l'url http, j'ai une réponse :
app->get('/',function() use ($app, $client){
$response = $client->get("http://www.google.fr");
var_dump($response);
});
Ma réponse:
object(GuzzleHttp\Message\Response)[102]
private 'reasonPhrase' => string 'OK' (length=2)
private 'statusCode' => int 200
private 'effectiveUrl' => string 'http://www.google.fr' (length=20)
private 'headers' (GuzzleHttp\Message\AbstractMessage) =>
array (size=13)
'date' =>
array (size=1)
0 => string 'Wed, 18 Feb 2015 10:57:37 GMT' (length=29)
'expires' =>
Mais avec https :
$app->get('/',function() use ($app, $client){
$url = "https://api.zoapp.com/v1/stc/cans/directory/pub/Employees";
$response = $client->get("https://www.facebook.com/");
var_dump($response);
});
J'ai des erreurs :
RequestException in RequestException.php line 51:
et
RingException in CurlFactory.php line 126:
Détails : pastbin lien
OriginalL'auteur damien marchand | 2015-02-18
Vous devez vous connecter pour publier un commentaire.
Suivant votre lien pour les détails, le message d'exception dit:
Recherche http://curl.haxx.se/libcurl/c/libcurl-errors.html j'ai trouvé
Donc c'est très probablement un problème avec la vérification SSL/CA bundle. En définissant la
vérifier
demande d'option pourfalse
, bouffer (resp. curl) ne va pas essayer de vérifier l'hôte à l'encontre d'un certificat, d'où l'erreur disparaît (-- en réponse à https://stackoverflow.com/a/28582692/413531)Cependant, vous ne voulez pas le faire 😉 au Lieu de cela, vous devriez essayer de résoudre le problème en fournissant un valide CA bundle.
IIRC, en v4 bouffer fourni un certificat par défaut (voir https://github.com/guzzle/guzzle/blob/4.2.3/src/cacert.pem ), mais que, dans la version 5 et tente maintenant de découvrir votre système par défaut CA bundle. De les docs, ces emplacements sont vérifiées:
Cependant, je l'ai trouvé plus facile de définir le certificat explicitement lors de la création d'un nouveau
Client
. Que signifie:Client
instanciationExemple (en supposant que vous avez le certificat nommé
cacert.pem
situé dans le même répertoire que le script):GuzzleHttp\Message\MessageFactoryInterface
OriginalL'auteur Hirnhamster
J'ai trouvé une solution, mais ne sais pas pourquoi ça marche :
Spécifiez le fichier PEM pour le certificat dans l'option vérifier.
$client = new \GuzzleHttp\Client(['verify' => '/full/path/to/cert.pem']);
Il est évident pourquoi il fonctionne, il désactive la vérification du certificat ssl...
OriginalL'auteur damien marchand