Foros del Web » Programando para Internet » PHP »

PHP OO obtener Captcha CURL

Estas en el tema de obtener Captcha CURL en el foro de PHP en Foros del Web. hola a todos estoy intentando hacer mi web para envio de sms, y estoy estudiando el metodo CURL para obtener la imagen de verificacion aunque ...
  #1 (permalink)  
Antiguo 27/12/2011, 18:27
 
Fecha de Ingreso: noviembre-2011
Mensajes: 69
Antigüedad: 12 años, 4 meses
Puntos: 0
obtener Captcha CURL

hola a todos estoy intentando hacer mi web para envio de sms, y estoy estudiando el metodo CURL para obtener la imagen de verificacion aunque creo que despues tendria que enviar toda esa informacion a sus campos correspondientes, otra problema.
Consegui este codigo PHP curl, logre hacer que me traiga solo el codigo pero estatico, es decir la unica que hice es colocar la direccion de la imagen dejo una muestra del codigo:

Código PHP:
<?php

// standard browser header
$user_agent "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7";
$ref 'http://sms.personal.com.ar/Mensajes/msn.htm';
$file './cookie.txt';
// the target url which contains scripts that generates the cookie
$url "http://sms.personal.com.ar/Mensajes/msn.htm";

$ch curl_init();

// set user agent
curl_setopt($chCURLOPT_USERAGENT$useragent);
// set the target url
curl_setopt($chCURLOPT_URL,$url);
curl_setopt($chCURLOPT_COOKIEJAR$file);
curl_setopt($chCURLOPT_RETURNTRANSFER1);
// execute curl,fetch the result and close curl connection
$resultcurl_exec ($ch);
// close the connection
curl_close($ch);




// Allocate a new cURL handle that gets the captcha image



$ch curl_init("http://sms3.personal.com.ar/Mensajes/tmp/6048fr731jsajtig.png");
if (! 
$ch) {
   die( 
"Cannot allocate a new PHP-CURL handle" );
}

// We'll be returning this transfer, and the data is binary
// so we don't want to NULL terminate
curl_setopt($chCURLOPT_RETURNTRANSFER1);
curl_setopt($chCURLOPT_BINARYTRANSFER1);
curl_setopt($chCURLOPT_COOKIEFILE$file); 
// Grab the jpg and save the contents in the $data variable
$data curl_exec($ch);
// close the connection
curl_close($ch);
// Set the header to type image/jpeg, since that's what we're
// displaying
header("Content-type: image/jpeg");
// Output the image
print( $data );
?>
  #2 (permalink)  
Antiguo 28/12/2011, 17:18
Avatar de davidcr  
Fecha de Ingreso: septiembre-2004
Ubicación: Cartago Costa Rica
Mensajes: 95
Antigüedad: 19 años, 6 meses
Puntos: 7
Información Respuesta: obtener Captcha CURL

Hola..

he pasado un rato trasteando tu codigo, pero ya de principio tenemos un problema parece basico pero ya me tiene arto... Curl no esta guardando las cookies como debería, al principio pense que era un problema con mi PHP en windows, pero lo acabo de probar en otro server en linux y pasa los mismo.

Mira cuando se visita
Código:
http://sms.personal.com.ar/Mensajes/msn.htm
efectivamente este sitio genera 14 cookies que debemos guardar para transmitirlas en la proxima consulta tal y como lo muestro en la imagen. El problema radica en que Curl parece que no esta haciendo su trabajo.



He probado lo siguiente:

Código PHP:
standard browser header
$user_agent 
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.7) Gecko/20060909 Firefox/1.5.0.7";
$ref 'http://sms.personal.com.ar/Mensajes/msn.htm';
$file 'cookie.txt';
// the target url which contains scripts that generates the cookie
$url "http://sms.personal.com.ar/Mensajes/msn.htm";

$ch curl_init();

// set user agent
curl_setopt($chCURLOPT_USERAGENT$useragent);
// set the target url
curl_setopt($chCURLOPT_URL,$url);
// curl_setopt($ch, COOKIESESSION, true);
curl_setopt($chCURLOPT_COOKIEJAR$file);
curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
// execute curl,fetch the result and close curl connection
$resultcurl_exec ($ch);
// close the connection
curl_close($ch);

  
//echo $result; 
Porsupuesto ya tambien verifiqué los permisos en la carpeta lectura/escritura y estan bien.... no se que sucede

Si te sirve de algo, encontre este Componente que se llama Chilkat http
http://www.chilkatsoft.com/HttpActiveX.asp funciona de maravilla, incluso hace bien su trabajo guardando las cookies!! Lo malo es que es de paga jeje Es el que uso actualmente con mi pagina para un trabajo similar a lo que quieres, sin embargo ahora en la empresa quieren migrar a un servidor en Linux y este componente solo trabaja en Windows y porsupuesto debes tener un servidor como minimo un VPS para poder instalarlo.
Por eso la necesidad de lograr esto con Curl !! pero no funcionan las Cookies !!

Alguien aquí nos podrá echar una mano??

gracias.
  #3 (permalink)  
Antiguo 28/12/2011, 19:17
 
Fecha de Ingreso: noviembre-2011
Mensajes: 69
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: obtener Captcha CURL

Wow veo que sabes mucho.... seguire investigando en el asunto la verdad de PHP se poco y menos de cURL pero cualquier cosa te aviso. Si hay alguien que nos pueda ayudar se agradece...
  #4 (permalink)  
Antiguo 28/12/2011, 19:37
 
Fecha de Ingreso: noviembre-2011
Mensajes: 69
Antigüedad: 12 años, 4 meses
Puntos: 0
De acuerdo Respuesta: obtener Captcha CURL

Evidentemente se poco, estuve probando y testeando este codigo y funciona... lo que unico que lo que consigo es traer la web enteraa aca te lo dejo....



Código PHP:
<?php
/**
 * Clase para gestionar las conexesiones y peticiones a servidores remotos
 */
class HttpConnection {
    private 
$curl;
    private 
$cookie;
    private 
$cookie_path="/cookies";
    private 
$id;

    public function 
__construct() {
        
$this->id time();
    }
    
/**
     * Inicializa el objeto curl con las opciones por defecto.
     * Si es null se crea
     * @param string $cookie a usar para la conexion
     */
    
public function init($cookie=null) {
        if(
$cookie)
            
$this->cookie $cookie;
        else
            
$this->cookie $this->cookie_path $this->id;

        
$this->curl=curl_init();
        
curl_setopt($this->curlCURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1");
        
curl_setopt($this->curlCURLOPT_HEADERfalse);
        
curl_setopt($this->curlCURLOPT_COOKIEFILE,$this->cookie);
        
curl_setopt($this->curlCURLOPT_HTTPHEADER, array("Accept-Language: es-es,en"));
        
curl_setopt($this->curlCURLOPT_COOKIEJAR$this->cookie);
        
curl_setopt($this->curlCURLOPT_SSL_VERIFYPEERfalse);
        
curl_setopt($this->curlCURLOPT_SSL_VERIFYHOSTfalse);
        
curl_setopt($this->curlCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_0);
        
curl_setopt($this->curlCURLOPT_RETURNTRANSFER,true);
        
curl_setopt($this->curlCURLOPT_CONNECTTIMEOUT5);
        
curl_setopt($this->curlCURLOPT_TIMEOUT60);
        
curl_setopt($this->curlCURLOPT_AUTOREFERERTRUE);
}
    
/**
     * Establece en que ruta se guardan las cookies.
     * Importante: El usuario de apache debe tener acceso de lectura y escritura
     * @param string $path
     */
    
public function setCookiePath($path){
        
$this->cookie_path $path;
    }
    
/**
     * Envía una peticion GET a la URL especificada
     * @param string $url
     * @param bool $follow
     * @return string Respuesta generada por el servidor
     */
    
public function get($url,$follow=false) {
        
$this->init();
        
curl_setopt($this->curlCURLOPT_URL$url);
        
curl_setopt($this->curlCURLOPT_POST,false);
        
curl_setopt($this->curlCURLOPT_HEADER$follow);
        
curl_setopt($this->curlCURLOPT_REFERER'');
        
curl_setopt($this->curlCURLOPT_FOLLOWLOCATION$follow);
        
$result=curl_exec($this->curl);
        if(
$result === false){
            echo 
curl_error($this->curl);
        }
        
$this->_close();
        return 
$result;
    }
    
/**
     * Envía una petición POST a la URL especificada
     * @param string $url
     * @param array $post_elements
     * @param bool $follow
     * @param bool $header
     * @return string Respuesta generada por el servidor
     */
    
public function post($url,$post_elements,$follow=false,$header=false) {
        
$this->init();
        
$elements=array();
        foreach (
$post_elements as $name=>$value) {
            
$elements[] = "{$name}=".urlencode($value);
        }
        
$elements join("&",$elements);
        
curl_setopt($this->curlCURLOPT_URL$url);
        
curl_setopt($this->curlCURLOPT_POST,true);
        
curl_setopt($this->curlCURLOPT_REFERER'');
        
curl_setopt($this->curlCURLOPT_HEADER$header OR $follow);
        
curl_setopt($this->curlCURLOPT_POSTFIELDS$elements);
        
curl_setopt($this->curlCURLOPT_FOLLOWLOCATION$follow);
        
$result=curl_exec($this->curl);
        
$this->_close();
        return 
$result;
    }
    
/**
     * Descarga un fichero binario en el buffer
     * @param string $url
     * @return string
     */
    
public function getBinary($url){
        
$this->init();
        
curl_setopt($this->curlCURLOPT_URL$url);
        
curl_setopt($this->curlCURLOPT_BINARYTRANSFER,1);
        
$result curl_exec($this->curl);
        
$this->_close();
        return 
$result;
    }
    
/**
     * Cierra la conexión
     */
    
private function _close() {
        
curl_close($this->curl);
    }
    public function 
close(){
        if(
file_exists($this->cookie))
            
unlink($this->cookie);
    }
}




y se lo llama del siguiente:


Código PHP:
<?php
require_once("HttpConnection.php");
$http = new HttpConnection();  
$http->setCookiePath("/my_cookie_path/");  
$http->init();  
echo 
$http->get("http://www.google.es");  
$http->close();

Alguna idea de como implementarlo? o al menos traer solo la tabla de la pagina?

Taambien te dejo esta pagina al parecer funciona pero no se como instalarla... utiliza codeigniter:

http://www.diegodicamillo.com.ar/blog/2010/01/08/envios-de-sms-como-email-utilizando-codeigniter/comment-page-1/#comment-505


Última edición por maczy; 28/12/2011 a las 20:06
  #5 (permalink)  
Antiguo 29/12/2011, 14:16
 
Fecha de Ingreso: noviembre-2011
Mensajes: 69
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: obtener Captcha CURL

Logre esto no ser si sirve para algo pero consigo traer el captcha ahora no tengo idea de como enviarlo...




Código HTML:
http://sms00.comxa.com/example/index.php
  #6 (permalink)  
Antiguo 29/12/2011, 16:33
Avatar de davidcr  
Fecha de Ingreso: septiembre-2004
Ubicación: Cartago Costa Rica
Mensajes: 95
Antigüedad: 19 años, 6 meses
Puntos: 7
Sonrisa Respuesta: obtener Captcha CURL

Hola amigo.

Estube viendo la libreria que citaste pero esta igualmente basada en Curl y por las pocas pruebas que le hice no esta funcionando.

Te recomiendo uses la libreria que te estoy dejando, que ya esta probada y funcionando. Y el codigo que estube trasteando que creo debe funcionar a la hora de hacer el envio POST lo que no sé aun es como hacerle para que PHP obtenga el Captcha de la imagen, se detenga hasta que se envie el codigo de respuesta y haga el POST sin perder la conexion.. te lo dejo de tarea.

Libreria http.inc

La bajas de aquí:

http://www.phpclasses.org/package/57...-features.html


Y ahora lo llamas con este codigo :

Código PHP:
<?php

/*********************************************************************
 * Demonstrates the use of the get() method
 *********************************************************************/
    
require_once( 'http.inc' );
    
// header( 'Content-Type: text/xml' );
    
    // Grab a RDF file from phpdeveloper.org and display it
    
$http_client = new httpHTTP_V11false);
    
$http_client->host 'sms3.personal.com.ar';
    
    if ( 
$http_client->get'/Mensajes/sms.php' ) == HTTP_STATUS_OK)
        
# print( $http_client->get_response_body() );
       
{
     
  


    
$Textohtml$http_client->get_response_body();

   
$Paso1 explode("\r"$Textohtml);
$Preresult explode('"'$Paso1[160]);

 
$URLCaptcha$Preresult[1];

# Mostrar el captcha

echo "<img src='".$URLCaptcha."' width='120' height='38'/>";


echo 
"<BR><BR><input name='codigo' type='text'/>";

   exit(); 
// quitar para continuar pruebas de aqui en adelante


 # ACA EL CODIGO QUE SE NECESITA PARA ENVIAR EL FORM
 # PERO NO SE COMO HACERLE PARA QUE PHP RECOJA EL DATO
 # DE LA CELDA DE ARRIBA (la respuesta del captcha)
 # SIN CORTAR LA CONEXION INICIAL



   # HACER EL POST

$CodigoDeArea="AQUI TU CODIGO DE AREA";
$Numero="AQUI EL NUMERO A DONDE VAS A ENVIAR";
$Remitente="Persona que envia";
$Mensaje"Escribe aqui tu mensaje";
$CodigoCaptcha="Escribe el codigo de la imagen";



   
$form = array(
                
'form_flag' => '',
                
'Snb' => '',
                
'subname' => '',
                
'sig' => '',
                
'msgtext' => '',
                
'form' => 'ht4',
                
'size' => '10',
                
'btn_send' => 'SEND',
                
'historico' => '',
                
'historico' => 'Filename',
                
'FormValidar' => 'novalidar',
                
'CODAREA' => $CodigoDeArea,
                
'NRO' => $Numero,
                
'DE_MESG_TXT' => $Remitente,
                
'MESG_TXT' => $Mensaje,
                
'codigo' => $CodigoCaptcha,);


  
$http_client->host 'sms3.personal.com.ar';
    
$status $http_client->post'/Mensajes/sms.php' );
    if ( 
$status == HTTP_STATUS_OK ) {
        print( 
$http_client->get_response_body() );
    } else {
        print( 
"An error occured while requesting your file !\n" );
        
print_r$http_client );
    }



 }

    else {
        print( 
'Server returned ' .  $http_client->status );

        
$http_client->disconnect();
    unset( 
$http_client );


}

 
$http_client->disconnect();
    unset( 
$http_client );
?>

Es lo que te puedo ayudar por ahora... te tocara descifrar como mantener la conexion para enviar la peticion POST restante. me cuentas como te fué
  #7 (permalink)  
Antiguo 29/12/2011, 17:23
 
Fecha de Ingreso: noviembre-2011
Mensajes: 69
Antigüedad: 12 años, 4 meses
Puntos: 0
Respuesta: obtener Captcha CURL

Muchas gracias.... estuve probando y no me anda.... gracias por el aporte igual....
esta complicado lo que quiero....

Miraste esto????
Código HTML:
http://sms00.comxa.com/example/index.php
  #8 (permalink)  
Antiguo 29/12/2011, 19:00
Avatar de davidcr  
Fecha de Ingreso: septiembre-2004
Ubicación: Cartago Costa Rica
Mensajes: 95
Antigüedad: 19 años, 6 meses
Puntos: 7
Respuesta: obtener Captcha CURL

Si lo ví, pero el problema de las consultas y las cookies ya esta resuelto con la clase que te dí.. estube haciendo otras pruebas burdas con un delay--

lo unico que se me ocurrio fue llamar el archivo php y a su vez llama en un iframe otro archivo dandole la imagen y el espacio de respuesta mientras con un bucle se mantiene en espera el archivo principal hasta que la persona envie la respuesta y se monta una sesion, el bucle verifica esa sesion cada 1 seg. y cuando esta montada la session entiende que es la respuesta del captcha y continua enviando el captcha..

pero el problema está en que el navegador se queda colgado y no permite enviar la respuesta ... ya lo intente de varias formas, la unica forma viable que funcionaria seria mostrar el captcha mientras en un popup se mantiene abierta la session php mientras la persona responde en la ventana principal.. es la unica viable que le veo de momento... pero no me convence.
  #9 (permalink)  
Antiguo 28/03/2012, 03:30
 
Fecha de Ingreso: marzo-2012
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Respuesta: obtener Captcha CURL

Php cURL lo usas para testear.
No seria más facil utilizar smtp o pop3 más redireccionarlo a personal mail? Creas un codigo php que mande una alerta por medio de html.

Etiquetas: captcha, curl, imagendinamica, sms
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 20:20.