PHP Soapclient et connexion HTTPS via un proxy
Rédigé par gorki Aucun commentaireLe problème :
En passant via mon proxy entreprise ou local (SQUID) mes requêtes SOAP recevaient les erreurs :
- Parsing WSDL: Couldn't load from 'https://host/service?wsdl' : failed to load external entity 'https://host/service?wsdl'
- Could not connect to host
Solution :
Trouver l'origine du problème, activer les traces :
- Activer les traces
- Tracer la dernière requête / réponse / entête
$client = new SoapClient("http://www.webservicex.net/ConverPower.asmx?WSDL", array('trace' => 1)); echo "====== REQUEST HEADERS =====" . PHP_EOL; var_dump($client->__getLastRequestHeaders()); echo "========= REQUEST ==========" . PHP_EOL; var_dump($client->__getLastRequest()); echo "========= RESPONSE =========" . PHP_EOL; var_dump($response);
array ( 'trace' => 1 'proxy_host' => 127.0.0.1 'proxy_port' => 3128 )
// Attention ! vérifier que ces directives sont bien appelées (par exemple pas dans un fichier classe... sifflotements...) ini_set('soap.wsdl_cache_enabled',0); ini_set('soap.wsdl_cache_ttl',0)
$context = stream_context_create(array( 'ssl' => array( 'verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true ) )); $client = new SoapClient(null, array( 'location' => 'https://...', 'uri' => '...', 'stream_context' => $context ));