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 