Recuperar recursos de servidors externs des de la LAMP
Publicat per Oriol Roselló i Castells el 23/04/2014 - 11:45 | Última modificació: 30/12/2015 - 11:02
L'entramat de xarxes i sistemes de la corporació fa que la recuperació de recursos externs no sigui evident perquè segons la naturalesa del recurs cal fer-ho a través del proxy o amb una crida directe, a més, a vegades hi ha problemes amb els certificats HTTPS (per exemple, int-saj no disposa de certificat, etc.)
Així que el següent codi us resultarà útil si necesiteu recuperar des de la LAMP2 (DVOL2 o PRD2) un recurs d'un altre servidor (imatge, xml, json, etc.).
<?php $url = '__LA_URL_DEL_TEU_RECURS_'; $proxy = 'proxyxic4.corpo.ad.diba.es'; $port = 80; $proxy_exceptions = 'diba.cat,diba.es'; // Iniciem la connexió HTTP via cURL $c = curl_init(); // Paràmetres bàsics curl_setopt($c, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($c, CURLOPT_URL, $url); curl_setopt($c, CURLOPT_TIMEOUT, 5); curl_setopt($c, CURLOPT_FOLLOWLOCATION, 10); curl_setopt($c, CURLOPT_MAXREDIRS, 10); curl_setopt($c, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); curl_setopt($c, CURLOPT_HEADER, TRUE); // Si és HTTPS ignorem la validació del certificat. // La DiBa utilitza certificats de CatCerc i no estan plenament reconeguts com entitat certificadora a nivell internacional. if (strpos($url, 'https') !== FALSE) { curl_setopt($c, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($c, CURLOPT_SSL_VERIFYPEER, FALSE); } // Determinem si cal proxy o no. $proxy_exceptions = empty($proxy_exceptions) ? '' : explode(',', $proxy_exceptions); $use_proxy = TRUE; foreach ($proxy_exceptions as $exception) { if (preg_match("/" . $exception . "/", $url)) { $use_proxy = FALSE; } } if ($use_proxy == TRUE) { curl_setopt($c, CURLOPT_PROXY, $proxy); curl_setopt($c, CURLOPT_PROXYPORT, 80); } // Recuperem el nostre recurs $data = curl_exec($c); // Recuperem la info de la petició $info = curl_getinfo($c); // Tanquem la petició curl_close($c); if ($info['http_code'] == 200) { // OK! Tot ha funcionat i tenim les dades a: $data } else { // Error. Codis d'error: http://es.wikipedia.org/wiki/Anexo:C%C3%B3digos_de_estado_HTTP } ?>
Grups de treball:
Plataforma PHP