2011-04-27 21 views
12
 
define('COOKIE', './cookie.txt'); 
define('MYURL', 'https://register.pandi.or.id/main'); 

function getUrl($url, $method='', $vars='', $open=false) { 
    $agents = 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16'; 
    $header_array = array(
     "Via: 1.1 register.pandi.or.id", 
     "Keep-Alive: timeout=15,max=100", 
    ); 
    static $cookie = false; 
    if (!$cookie) { 
     $cookie = session_name() . '=' . time(); 
    } 
    $referer = 'https://register.pandi.or.id/main'; 
    $ch = curl_init(); 
    if ($method == 'post') { 
     curl_setopt($ch, CURLOPT_POST, 1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS, "$vars"); 
    } 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header_array); 
    curl_setopt($ch, CURLOPT_USERAGENT, $agents); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 5); 
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10); 
    curl_setopt($ch, CURLOPT_REFERER, $referer); 
    curl_setopt($ch, CURLOPT_COOKIE, $cookie); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

    $buffer = curl_exec($ch); 
    if (curl_errno($ch)) { 
     echo "error " . curl_error($ch); 
     die; 
    } 
    curl_close($ch); 
    return $buffer; 
} 

function save_captcha($ch) { 
    $agents = 'Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16'; 
    $url = "https://register.pandi.or.id/jcaptcha"; 
    static $cookie = false; 
    if (!$cookie) { 
     $cookie = session_name() . '=' . time(); 
    } 
    $ch = curl_init(); // Initialize a CURL session. 
    curl_setopt($ch, CURLOPT_URL, $url); // Pass URL as parameter. 
    curl_setopt($ch, CURLOPT_USERAGENT, $agents); 
    curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
    curl_setopt($ch, CURLOPT_COOKIE, $cookie); 
    curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIE); 
    curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // Return stream contents. 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // We'll be returning this 
    $data = curl_exec($ch); // // Grab the jpg and save the contents in the 
    curl_close($ch); // close curl resource, and free up system resources. 
    $captcha_tmpfile = './captcha/captcha-' . rand(1000, 10000) . '.jpg'; 
    $fp = fopen($tmpdir . $captcha_tmpfile, 'w'); 
    fwrite($fp, $data); 
    fclose($fp); 
    return $captcha_tmpfile; 
} 

if (isset($_POST['captcha'])) { 
    $id = "yudohartono"; 
    $pw = "mypassword"; 
    $postfields = "navigation=authenticate&login-type=registrant&username=" . $id . "&password=" . $pw . "&captcha_response=" . $_POST['captcha'] . "press=login"; 
    $url = "https://register.pandi.or.id/main"; 
    $result = getUrl($url, 'post', $postfields); 
    echo $result; 
} else { 

    $open = getUrl('https://register.pandi.or.id/main', '', '', true); 
    $captcha = save_captcha($ch); 
    $fp = fopen($tmpdir . "/cookie12.txt", 'r'); 
    $a = fread($fp, filesize($tmpdir . "/cookie12.txt")); 
    fclose($fp); 
<form action='' method='POST'> 
     <img src='<?php echo $captcha ?>' /> 
     <input type='text' name='captcha' value=''> 
     <input type='submit' value='proses'> 
    </form>"; 
 
    if (!is_readable('cookie.txt') && !is_writable('cookie.txt')) { 
     echo "cookie fail to read"; 
     chmod('../pandi/', '777'); 
    } 
} 

este cookie.txtCómo CURL Entrar con Captcha y sesión

 
# Netscape HTTP Cookie File 
# http://curl.haxx.se/rfc/cookie_spec.html 
# This file was generated by libcurl! Edit at your own risk. 

register.pandi.or.id FALSE / FALSE 0 JSESSIONID 05CA8241C5B76F70F364CA244E4D1DF4 

después de presentar la forma simplemente mostrar

 
HTTP/1.1 200 OK Date: Wed, 27 Apr 2011 07:38:08 GMT Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.4; Tomcat-5.0.28/JBoss-4.0.0 (build: CVSTag=JBoss_4_0_0 date=200409200418) Content-Length: 0 Via: 1.1 register.pandi.or.id Content-Type: text/plain X-Pad: avoid browser bug 

si no es error "Captcha válido" siempre falló iniciar sesión en pandi ¿Qué mal en mi script?
No me quiero romper Captcha pero quiero código de imagen de pantalla y código de imagen de entrada del usuario de mi página web, para que el usuario pueda dotID del registrador de dominio de mi web de forma automática

Respuesta

19

Un captcha está diseñado para diferenciar entre humanos y robots (programas). Parece que estás intentando iniciar sesión con un programa. El captcha parece hacer su trabajo :).

No veo una forma legal de hacerlo.

+0

Estoy de acuerdo con @bazmegakapa - Pero es posible que desee leer en este http://www.cs.sfu.ca/~mori/research/gimpy/ – Phliplip

+0

obtengo captcha y la pantalla para la entrada del usuario y de inicio de sesión, Lo hago porque quiero que mi cliente pueda registrar el dominio automáticamente en pandi.or.id y administrar el dominio desde mi página web, porque pandi.or.id no tiene API como otro registrador de dominio –

+0

¿Ha contactado a PANDI? Debería comenzar con eso. – kapa

0

CAPTCHA es una imagen dinámica creada por el servidor cuando se pulse la página. Seguirá cambiando, debe extraer el captcha de la página y luego analizarlo y luego enviar su página para iniciar sesión. Captcha seguirá cambiando a medida que se active la página para cargar.

0

Con PHP No sé cómo hacerlo, tienes que obtener el captcha y encontrar la manera de resolverlo. Tiene muchos algoritmos para hacerlo por ti, pero si quieres usar Java, ya he pirateado el código fuente de this link para obtener el código para resolver el captcha y funciona muy bien para muchos sistemas de captcha.

Por lo tanto, se podría tratar de implementar su propio código de imagen solucionador, que tomará mucho tiempo, intenta encontrar una aplicación existente para PHP, o bien, en mi humilde opinión, la mejor opción, para utilizar la base de código JDownloader.

1

Esto sucede porque,
Usted tomó la imagen de código de imagen de primera getURL (ie first curl_exec) y se procesa el código de imagen, pero para enviar su código de imagen se le solicita getURL (ie again curl_exec) que significa una nueva página con un nuevo código de imagen de nuevo.

Así que está colocando el viejo captcha y colocándolo en el nuevo captcha. Estoy teniendo el mismo problema & lo resolvió.

0

Usando una solución de navegación sin cabeza esto es posible. es decir: zombie.js coffee.js en Node ... También es posible extraer la "imagen" del captcha y, usando el reconocimiento de imágenes, "leer" la imagen y convertirla en texto, que luego se publica con el formulario .

A partir de hoy, el único método infalible para "engañar" a un captcha es usar la navegación sin cabeza.

0

Sí, Andro Selva tiene razón. En la segunda solicitud, da un nuevo captcha. Una vez que carga el captcha con la función getUrl y la segunda carga es desde la función save_captcha, estas son 2 imágenes diferentes.

Se debe hacer algo como esto: descargar la imagen Captcha antes del cierre del rizo y antes y después decirle al script que esperar hasta que usted proporciona respuestas código de imagen - Voy a utilizar preg_match. También requerirá algo de javascript.

Si la imagen de captcha se genera a partir de javascript, debe ejecutar este javascript con la misma cookie o token. En esta situación, la solución más fácil es registrar los encabezados con, p. livehttpheaders addon para mozila ffox.