Foros del Web » Programando para Internet » PHP »

CURL tomar y enviar una cookie

Estas en el tema de CURL tomar y enviar una cookie en el foro de PHP en Foros del Web. Hola chicos Necesito abrir una conexión con: http://visionweb.occourts.org/Vision.../SearchCase.do uso CURL pero... el sitio usa una cookie, sin esa cookie la búsqueda no devuelve resultados. Tengo ...
  #1 (permalink)  
Antiguo 10/07/2008, 17:23
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 6 meses
Puntos: 1
CURL tomar y enviar una cookie

Hola chicos
Necesito abrir una conexión con:
http://visionweb.occourts.org/Vision.../SearchCase.do

uso CURL pero... el sitio usa una cookie, sin esa cookie la búsqueda no devuelve resultados.
Tengo esto:
Código PHP:
extract($_POST);

//set POST variables
$url 'http://visionweb.occourts.org/Vision_Public/SearchCase.do';
//<form name="caseInfoDisplayForm" method="post" action="/Vision_Public/DisplayCaseInfo.do">
$casenumber="06SM02800";
$fields = array(
                        
'caseNbr'=>$casenumber,
                        
'lastName'=>"",
                         
'advSearch' =>"",
                         
'middleName'=>"",
                         
'enterpriseName'=>"",
                         
'dln'=>"",
                         
'firstName'=>"",
                         
'dob_month'=>"",
                         
'dob_day'=>"",
                         
'dob_year'=>"",
                         
'strictErrorChecking'=>"true"
                
);

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');

//open connection
$ch curl_init();
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
  
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
  
$header[] = "Cache-Control: max-age=0";
  
$header[] = "Connection: keep-alive";
  
$header[] = "Keep-Alive: 300";
  
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
  
$header[] = "Accept-Language: en-us,en;q=0.5";
  
$header[] = "Pragma: ";
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($chCURLOPT_USERAGENT'mozilla/5.0 (iphone; u; cpu like mac os x; en) applewebkit/420+ (khtml, like gecko) version/3.0 mobile/1c25 safari/419.3');
curl_setopt($curlCURLOPT_HTTPHEADER$header);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($chCURLOPT_COOKIE'JSESSIONID=F73D02FB45D4F18DCD2D566E76D7D1C6');
// desguise referer
curl_setopt($chCURLOPT_REFERER'http://visionweb.occourts.org/Vision_Public/SearchCase.do');

//execute post
$result curl_exec($ch);

//close connection
curl_close($ch);
//$text=curl($url);
echo $result
Pero claro no pasa nada porque esa NO es la cookie que corresponde.
Si espío la cookie en FF y pongo ese valor en este script entonces sí me trae el contenido.
Cómo puedo hacer ?
Ayuda por favor, muchas gracias.
  #2 (permalink)  
Antiguo 10/07/2008, 22:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: CURL tomar y enviar una cookie

Hola Suyta,

Te recomiendo usar la opción del cookie_jar que tiene cURL para almacenar y pasar las cookies.

Saludos
  #3 (permalink)  
Antiguo 10/07/2008, 23:30
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: CURL tomar y enviar una cookie

Gracias GatorV !



jejeje... dame tiempo a ver si lo entiendo...
  #4 (permalink)  
Antiguo 11/07/2008, 06:47
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: CURL tomar y enviar una cookie

Intento tomar la cookie correcta y re-enviarla con esto:

Código PHP:
$url 'http://visionweb.occourts.org/Vision_Public/SearchCase.do#searchResults';
$c get_headers($url);
$d explode(":",$c[3]);
$cotrim($d[1]);
$co2=explode("=",$co);
$co3=explode(';',trim($co2[1]));
$urls'http://visionweb.occourts.org/Vision_Public/SearchCase.do;jsessionid='.trim($co3[0]);
//<form name="caseInfoDisplayForm" method="post" action="/Vision_Public/DisplayCaseInfo.do">
$casenumber="06SM02800";
$fields = array(
                        
'caseNbr'=>$casenumber,
                        
'lastName'=>"",
                         
'advSearch' =>"",
                         
'middleName'=>"",
                         
'enterpriseName'=>"",
                         
'dln'=>"",
                         
'firstName'=>"",
                         
'dob_month'=>"",
                         
'dob_day'=>"",
                         
'dob_year'=>"",
                         
'strictErrorChecking'=>"true",
                         
'action'=>"1"
                
);
foreach(
$fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');

function 
readHeader($ch$header){
    echo 
$header;
}

$ch curl_init();
$header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,";
  
$header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5";
  
$header[] = "Cache-Control: max-age=0";
  
$header[] = "Connection: keep-alive";
  
$header[] = "Keep-Alive: 300";
  
$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7";
  
$header[] = "Accept-Language: en-us,en;q=0.5";
  
$header[] = "Pragma: ";

curl_setopt($ch,CURLOPT_URL,$urls);
curl_setopt($chCURLOPT_USERAGENT$_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
curl_setopt($chCURLOPT_COOKIE$co);
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_REFERER'http://visionweb.occourts.org/Vision_Public/SearchCase.do');
                
$result curl_exec($ch);
curl_close($ch);

echo 
$result
Pero no funciona.
Qué estoy haciendo mal ?
  #5 (permalink)  
Antiguo 11/07/2008, 08:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: CURL tomar y enviar una cookie

Hola Suyta,

Como te comento tienes que usar el COOKIE JAR de cURL, y lo que haces son dos peticiones, la primera es por la pagina donde se levanta la cookie, cURL la guarda en el "jarro" y después haces la petición a la URL, en ese momento cURL se encargará automáticamente de enviar la cookie que tenga en el "jarro".

Saludos.
  #6 (permalink)  
Antiguo 11/07/2008, 08:41
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: CURL tomar y enviar una cookie

Ta...
es esto ?

Código PHP:
$casenumber="06SM02800";
$url ="http://visionweb.occourts.org/Vision_Public/SearchCase.do";
$fields = array(
                        
'caseNbr'=>$casenumber,
                        
'lastName'=>"",
                         
'advSearch' =>"",
                         
'middleName'=>"",
                         
'enterpriseName'=>"",
                         
'dln'=>"",
                         
'firstName'=>"",
                         
'dob_month'=>"",
                         
'dob_day'=>"",
                         
'dob_year'=>"",
                         
'submit'=>"Search"
                
);

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');


$ch curl_init();
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_URL$url);
curl_setopt($chCURLOPT_HTTPAUTHCURLAUTH_ANY);
curl_setopt ($chCURLOPT_COOKIEJAR'../tmp/cookie.txt');

curl_setopt($chCURLOPT_REFERER'http://visionweb.occourts.org/Vision_Public/SearchCase.do');
//curl_setopt ($ch, CURLOPT_POSTFIELDS, "login=emailid&passwd=password&&submit=Sign In");
ob_start();
curl_exec ($ch);
ob_end_clean();
curl_close ($ch);
unset(
$ch);
$ch curl_init();
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
curl_setopt($chCURLOPT_COOKIEFILE"../tmp/cookie.txt");
curl_setopt($chCURLOPT_URL,"http://visionweb.occourts.org/Vision_Public/SearchCase.do");
curl_setopt($chCURLOPT_REFERER'http://visionweb.occourts.org/Vision_Public/SearchCase.do#searchResults');
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);
$result curl_exec ($ch);

curl_close ($ch);
echo 
$result
Pero no sale nada
http://suygenesis.no-ip.org/court/curl_cookie.php
  #7 (permalink)  
Antiguo 11/07/2008, 08:47
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: CURL tomar y enviar una cookie

Deberías quitar el ob_start para ver que te esta regresando la transacción y ver los headers activando RETURN_HEADERS para que veas si esta poniendo la cookie correctamente.

Saludos.
  #8 (permalink)  
Antiguo 11/07/2008, 08:48
Avatar de MaBoRaK  
Fecha de Ingreso: abril-2003
Ubicación: La Paz - Bolivia
Mensajes: 2.003
Antigüedad: 20 años, 10 meses
Puntos: 35
Respuesta: CURL tomar y enviar una cookie

loading............

Fuera de eso supongo que cuando curl abre la conexion y cierra la página que abres crea una NUEVA COOKIE la idea sería de alguna forma mantener la conexion abierta.

1) abrir la pagina 1 tomar las cookies creadas
2) abrir otra página con las cookies recogidas en1
3) otra web etc etc

Todo esto sin cerrar la conexion, se puede esto?.

connection closed.
__________________

Maborak Technologies
  #9 (permalink)  
Antiguo 11/07/2008, 09:17
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: CURL tomar y enviar una cookie

Sí, exactamente lo que se necesita es lo que dice Maborak.

Ahora le quité el ob_start y habilité los headers... pero resulta que no hay ninguna cookie

http://www.anaheim-bail.com/extract/curl_cookie.php
  #10 (permalink)  
Antiguo 11/07/2008, 10:18
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 19 años, 10 meses
Puntos: 834
Respuesta: CURL tomar y enviar una cookie

Probá así:
Código PHP:
<?php
$location 
"";
$cookiearr = array();
function 
getPage($numero)
{
  global 
$location;
  global 
$cookiearr;
  global 
$ch;
    
$ch curl_init();
    
curl_setopt($chCURLOPT_URL,"http://visionweb.occourts.org/Vision_Public/SearchCase.do");
    
curl_setopt($chCURLOPT_REFERER"");
    
curl_setopt($chCURLOPT_SSL_VERIFYPEER0);
    
curl_setopt($chCURLOPT_RETURNTRANSFER1);
    
curl_setopt($chCURLOPT_FOLLOWLOCATION1);
    
curl_setopt($chCURLOPT_HEADERFUNCTION'read_header');
      
$html curl_exec($ch);
    
$matches = array();
    
    
    
$fields = array(
                        
'caseNbr'=>$numero,
                        
'lastName'=>"",
                         
'advSearch' =>"",
                         
'middleName'=>"",
                         
'enterpriseName'=>"",
                         
'dln'=>"",
                         
'firstName'=>"",
                         
'dob_month'=>"",
                         
'dob_day'=>"",
                         
'dob_year'=>"",
                         
'action'=>"Search"
                
);


foreach(
$fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
$fields_string=substr(trim($fields_string),0,-1);

    
$action "http://visionweb.occourts.org/Vision_Public/SearchCase.do";
    
curl_setopt($chCURLOPT_URL,$action);
    
curl_setopt($chCURLOPT_RETURNTRANSFER,1);
    
curl_setopt($chCURLOPT_POST1);
    
curl_setopt($chCURLOPT_POSTFIELDS,$fields_string);

    
$html curl_exec($ch);

  
curl_setopt($chCURLOPT_URL"http://visionweb.occourts.org/Vision_Public/SearchCase.do");
  
curl_setopt($chCURLOPT_RETURNTRANSFER,1);

    
$html curl_exec($ch);

  

    return 
$html;
}

function 
read_header($ch$string)
{
    global 
$location;
    global 
$cookiearr;
    global 
$ch;
    
    
$length strlen($string);
    if(!
strncmp($string"Location:"9))
    {
      
$location trim(substr($string9, -1));
    }
    if(!
strncmp($string"Set-Cookie:"11))
    {
      
$cookiestr trim(substr($string11, -1));
      
$cookie explode(';'$cookiestr);
      
$cookie explode('='$cookie[0]);
      
$cookiename trim(array_shift($cookie)); 
      
$cookiearr[$cookiename] = trim(implode('='$cookie));
    }
    
$cookie "";
    if(
trim($string) == ""
    {
      foreach (
$cookiearr as $key=>$value)
      {
        
$cookie .= "$key=$value; ";
      }
      
curl_setopt($chCURLOPT_COOKIE$cookie);
    }

    return 
$length;
}
echo 
getPage('06SM02800');
?>
Es más o menos lo mismo, pero tenías un nombre de campo mal colocado.
  #11 (permalink)  
Antiguo 11/07/2008, 11:45
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: CURL tomar y enviar una cookie

Impresionante Panino5001

Muchísimas gracias !!!

En algunos sitios no trabaja:

Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in /home/xxxx/public_html/extract/extract.php on line 1

Supongo que depende de la configuración del servidor pero en otros espectacular:
http://www.anaheim-bail.com/extract/extract.php

Qué necesita ? safe_mode desactivado ?
De nuevo mil gracias a todos y Panino5001 un grande, un maestro y muy muy generoso

Última edición por Suyta; 11/07/2008 a las 11:59
  #12 (permalink)  
Antiguo 11/07/2008, 14:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: CURL tomar y enviar una cookie

Así es Suyta,

Necesitas desactivar el safe_mode en el php.ini

Saludos.
  #13 (permalink)  
Antiguo 11/07/2008, 17:30
(Desactivado)
 
Fecha de Ingreso: septiembre-2004
Mensajes: 360
Antigüedad: 19 años, 6 meses
Puntos: 1
Respuesta: CURL tomar y enviar una cookie

Muchas gracias GatorV
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




La zona horaria es GMT -6. Ahora son las 13:51.