Foros del Web » Programando para Internet » PHP »

cURL por GET no muestra lo que deberia

Estas en el tema de cURL por GET no muestra lo que deberia en el foro de PHP en Foros del Web. hola gente, llevo mucho tiempo tratando de que un script php me muestre lo que necesito pero simplemente no puedo, he tratado de mil formas ...
  #1 (permalink)  
Antiguo 11/11/2011, 14:54
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 21 años, 5 meses
Puntos: 5
cURL por GET no muestra lo que deberia

hola gente, llevo mucho tiempo tratando de que un script php me muestre lo que necesito pero simplemente no puedo, he tratado de mil formas y nada, ahi el tema..

si acceden a la siguiente URL de forma directa da error:

Código PHP:
http://civil.poderjudicial.cl/CIVILPORWEB/AtPublicoDAction.do?TIP_Consulta=1&TIP_Lengueta=tdUno&SeleccionL=0&TIP_Causa=C&ROL_Causa=4370&ERA_Causa=2009&FEC_Desde=11%2F11%2F2011&FEC_Hasta=11%2F11%2F2011&SEL_Litigantes=0&RUT_Consulta=&RUT_DvConsulta=&NOM_Consulta=&APE_Paterno=&APE_Materno=&COD_Tribunal=146&irAccionAtPublico=Consultaee 
pero si antes cargan la web de consulta:

Código PHP:
http://civil.poderjudicial.cl/CIVILPORWEB/ 
lo que me ha llevado a deducir que hay una variable en la cookie JSESSION, la que hace que cargue el form con los datos, pero no logro obtener el form completo

aqui la funcion para obtener el JSESSION

Código PHP:
    function Get_SES_ID($URL_SESION){
        if(
$this->fSocket)
        {
        
$ch_ses curl_init ($URL_SESION);
        
curl_setopt($ch,_sesCURLOPT_URL$URL_SESION);
        
curl_setopt($ch_sesCURLOPT_RETURNTRANSFERtrue);
        
curl_setopt($ch_sesCURLOPT_HEADER1);
        
preg_match('/^Set-Cookie: (.*?);/m'curl_exec($ch_ses), $m);
        
curl_close($ch_ses);
        
        return array(
'ID_Sesion' => $m[1]);
        }
    } 
y en el curl:

Código PHP:

      $URL_SES 
"http://civil.poderjudicial.cl/CIVILPORWEB/";
      
$Sess_Var $this->Get_SES_ID($URL_SES);
      
$JSESSION $Sess_Var['ID_Sesion'];


CURLOPT_COOKIE$JSESSION 

alguien me da una mano, ya que se me acabaron las ideas..

muchas gracias.
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl

Última edición por cadrogui; 11/11/2011 a las 16:34
  #2 (permalink)  
Antiguo 11/11/2011, 17:49
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 17 años, 1 mes
Puntos: 188
Respuesta: cURL por GET no muestra lo que deberia

Eso pasa por que la aplicación está mal programada.

TE explico:

Lo que hace curl es abrir un recurso. Preg_match compara un string un array con una expresión regular y guarda las coincidencias en un nuevo arreglo.

La string o arreglo es curl_exec($ch_ses), la expresión regular busca algo que inicie con Set-Cookie: y el vector es $m

Se indica el índice en 1, porque $m[0] devolverá el numero de coincidencias y a partir de $m[1] devolverá el valor de estas coincidencias.


Conclusión: La función Get_SES_ID abre el recurso: http://civil.poderjudicial.cl/CIVILPORWEB/ por medio de curl me imagino que se optiene el código fuente y que con eso se comienza a buscar coincidencias con preg_match. Entonces es por esto que es necesario que el usuario visite http://civil.poderjudicial.cl/CIVILPORWEB/ antes.

Como vez la aplicación no es muy buena Ya se que no la hiciste tu =D, si no no te hubiera dicho esto jeje.

Saludos amigo :D
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #3 (permalink)  
Antiguo 11/11/2011, 19:05
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 21 años, 5 meses
Puntos: 5
Respuesta: cURL por GET no muestra lo que deberia

... no entendi mucho tu explicacion, pero a ver si entendi... cuando ejecuto la funcion esta retorna lo que necesito.. el JSESSION... pero cuando llamo a la web con los datos via GET no funciona y muere, es por esto que al cargar la web de consulta funciona bien en el browser, ese es mi problema, la funcion que obtiene el JSESSION nunca fue el problema..

ahi lo que retorna: JSESSIONID=0000su5ekihoGqRAVFMGrvuqbCm+roble-1

agradezco tu ayuda
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #4 (permalink)  
Antiguo 11/11/2011, 20:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: cURL por GET no muestra lo que deberia

Lo que debes de hacer es usar la opción CURLOPT_COOKIEJAR para poder persistir las cookies, así primero haces el request al primer URL para iniciar la sesión remota, y posteriormente visitas la segunda url, esto hará que cURL pase las cookies correctas y pueda reconocer la sesión el sitio 3ero.

Saludos.
  #5 (permalink)  
Antiguo 12/11/2011, 11:01
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 21 años, 5 meses
Puntos: 5
Respuesta: cURL por GET no muestra lo que deberia

lo probe y nada......

Código PHP:

      $this
->setopt(CURLOPT_REFERER'http://civil.poderjudicial.cl');
      
$this->setopt(CURLOPT_POST0);
      
$this->setopt(CURLOPT_CUSTOMREQUEST,'GET');
      
$this->setopt(CURLOPT_RETURNTRANSFERtrue);
      
$this->setopt(CURLOPT_FOLLOWLOCATION  ,1);
      
$this->setopt(CURLOPT_URL$url_get);
      
$this->setopt(CURLOPT_COOKIE$JSESSION);
      
$this->setopt(CURLOPT_COOKIEJAR$dir_cookie);
      
$result curl_exec($this->fSocket);
      
$this->destroy(); 
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #6 (permalink)  
Antiguo 12/11/2011, 13:39
 
Fecha de Ingreso: septiembre-2007
Ubicación: PyRoot
Mensajes: 1.515
Antigüedad: 17 años, 1 mes
Puntos: 188
Respuesta: cURL por GET no muestra lo que deberia

Hola amigo. Perdon por la pregunta creo que me perdí en el post.

En esa misma clase tienes un método llamado setopt()? y le estas pasando como argumento CURLOPT_ y su valor.

$this->setopt(CURLOPT_XXXXXX, "valor");

Me da a pensar eso que te comento.


Dentro de setopt() lo estás haciendo así?

Código PHP:
Ver original
  1. $curl = curl_init("recurso.php");
  2.  
  3. curl_setopt($curl,CURLOPT_COOKIE,$JSESSION);

Bueno surgen dudas. Lo que te ha dicho GatorV si lo haces bien yo imagino que ya tienes resuelto tu problema.

Por ejemplo aquí haces:

Código PHP:
Ver original
  1. $this->setopt(CURLOPT_REFERER, 'http://civil.poderjudicial.cl'); //NO TODOS LOS NAVEGADORES TE DAN EL REFERER en las cabeceras HTTP...
  2. $this->setopt(CURLOPT_POST, 0); //me parece que debes colocar true o false en lugar de 0 y 1
  3. $this->setopt(CURLOPT_CUSTOMREQUEST,'GET');//Este no lo conozco pero he visto que se usa valores DELETE, PUT,... visite el manual

http://php.net/manual/es/function.curl-setopt.php


Saludos.
__________________
Si quieres agradecer el triangulo obscuro de la parte derecha debes presionar +.
  #7 (permalink)  
Antiguo 15/11/2011, 06:32
Avatar de cadrogui  
Fecha de Ingreso: junio-2003
Mensajes: 875
Antigüedad: 21 años, 5 meses
Puntos: 5
Respuesta: cURL por GET no muestra lo que deberia

asi lo tengo:

Código PHP:

  
function setopt($opt$value)
  {
    return 
curl_setopt($this->fSocket$opt$value);
  } 
el init

Código PHP:
  function init($api_key)
  {
    
$db = new db_class;
    
$db->connect();    
    
    
$key trim($api_key);
    
    
$sql "SELECT COUNT(*) FROM api WHERE api_key = ";
    
$sql .= "'" .$key"'";
    
    
$consulta $db->select_one($sql);

    if (
$consulta == 1):
        return 
$this->fSocket curl_init();
      else:
          
$this->debug_titulo "Oops! - API Error:";
          
$this->debug "Api Key no v�lida (" .$api_key")";
    endif;
  } 

eso es, pero aun no logro que me funcione......
__________________
La mejor manera de aprender es por medio de un aprendizaje significativo....

http://www.cocert.cl
  #8 (permalink)  
Antiguo 15/11/2011, 09:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: cURL por GET no muestra lo que deberia

No veo en tu código que hagas lo que te digo, primero tienes que entrar al sitio, generar la cookie de sesión y almacenarla en el cookie jar, luego usando el mismo recurso cURL volver a visitar tu segundo url transmitiendo las cookies de sesión para que te reconozca como visitante legitimo de la web y puedas ver el formulario.

Saludos.
  #9 (permalink)  
Antiguo 05/05/2015, 17:08
 
Fecha de Ingreso: mayo-2015
Mensajes: 2
Antigüedad: 9 años, 6 meses
Puntos: 0
Respuesta: cURL por GET no muestra lo que deberia

CadRogui, se que este tema es muuuuy antiguo, pero lograste solucionar que las cookies persistieran en el llamado al .do?, estoy intentando algo similar y no logro que las cookies sean reconocidas en el segundo llamado.

Gracias por cualquier aporte.

Etiquetas: curl, muestra, variables
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:01.