I want to use Guzzle and Silex to send request to https pages.
With http url I have a response :
app->get('/',function() use ($app, $client){
$response = $client->get("http://www.google.fr");
var_dump($response);
});
My response:
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' =>
But with 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);
});
I have to errors :
RequestException in RequestException.php line 51:
and
RingException in CurlFactory.php line 126:
Details : pastbin link
Best Solution
Following your link to the details, the exception message says:
Looking up http://curl.haxx.se/libcurl/c/libcurl-errors.html I found
So it's most likely a problem with the SSL verification/CA bundle. By setting the
verify
request option tofalse
, guzzle (resp. curl) will not try to verify the host against a certificate, hence the error disappears (-- in reply to https://stackoverflow.com/a/28582692/413531)However, you do not want to do that ;) Instead, you should try to solve the issue by providing a valid CA bundle.
IIRC, in v4 guzzle provided a default certificate (see https://github.com/guzzle/guzzle/blob/4.2.3/src/cacert.pem ), but removed that in version 5 and now tries to discover your default system CA bundle. From the docs, those locations are checked:
However, I found it easier to set the certificate explicitly when creating a new
Client
. That means:Client
instantiationExample (assuming you have the certificate named
cacert.pem
located in the same directory as the script):