Recuperar recursos de servidors externs des de la LAMP

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
  }

?>
2
Etiquetes:
proxy, curl
1
Grups de treball:
Plataforma PHP