Autor
|
Tema: [Reto][PHP] Bot http (Leído 2,560 veces)
|
lnvisible
Desconectado
Mensajes: 527
|
Hay un tipo de retos incrementales que son más productivos que los retos habituales. http://en.wikipedia.org/wiki/Cutting_contesthttp://en.wikipedia.org/wiki/Guitar_battleEsto es un reto a ese estilo, consiste en ir añadiendo algo al bot para hacerlo más parecido a una persona en la navegación (con cookies, con referer, con todo eso), además para que sea más fácil indicarle los parámetros que tiene que rellenar (por ejemplo muchos formularios tienen campos hidden, podría rellenarlos él mismo), para que sea más fácil parsear el html después, para que sea más fácil usar proxies... el límite lo pone vuestra imaginación. Creo que puede ser un reto interesante, entretenido, productivo y del que todos saquemos el divertirnos, un código interesante y aprender y hacer algo útil. Vosotros diréis. Aquí tenéis un ejemplo de cómo podría empezarse, veremos si alguien continua o no, en unos días pondré una mejora si nadie se anima, y con eso espero que ya sí se anime alguien. class PHPBot { function PHPBot (){ $ch = $this->ch; curl_setopt($ch, CURLOPT_HEADER , 1); // Include headers in response or not curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); // Return (don't print) answer of exec curl_setopt($ch, CURLOPT_USERAGENT , "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12"); curl_setopt($ch, CURLOPT_AUTOREFERER , true); // Isn't this great? curl_setopt($ch, CURLOPT_HTTPHEADER , array('Accept: */*', 'Accept-Language: en-us,en;q=0.5', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7')); } private function act($url, $params = false){ $ch = $this->ch; if ($params != false){ curl_setopt($ch, CURLOPT_POSTFIELDS , $this->myurlencode($params)); } else return $r; } private function myurlencode($dict){ $r = ""; foreach($dict as $key => $value) return $r; } function get ($url){ return $this->act($url); } function post($url, $params){ return $this->act($url, $params); } }
|
|
« Última modificación: 25 Diciembre 2011, 14:50 pm por lnvisible »
|
En línea
|
|
|
|
#!drvy
|
Añado una función para parsear un string, recoger todo lo que empiece con http (links) y devolverlo en un array. class PHPBot { function PHPBot (){ $ch = $this->ch; curl_setopt($ch, CURLOPT_HEADER , 1); // Include headers in response or not curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); // Return (don't print) answer of exec curl_setopt($ch, CURLOPT_USERAGENT , "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12"); curl_setopt($ch, CURLOPT_AUTOREFERER , true); // Isn't this great? curl_setopt($ch, CURLOPT_HTTPHEADER , array('Accept: */*', 'Accept-Language: en-us,en;q=0.5', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7')); } private function act($url, $params = false){ $ch = $this->ch; if ($params != false){ curl_setopt($ch, CURLOPT_POSTFIELDS , $this->myurlencode($params)); } else return $r; } private function myurlencode($dict){ $r = ""; foreach($dict as $key => $value) return $r; } private function get_urls($context){ $query = '/http?\:\/\/[^\" ]+/i'; return $result[0]; } function get ($url){ return $this->act($url); } function post($url, $params){ return $this->act($url, $params); } }
Saludos
|
|
« Última modificación: 27 Diciembre 2011, 02:14 am por drvy | BSM »
|
En línea
|
|
|
|
lnvisible
Desconectado
Mensajes: 527
|
Muy bien, pero en ocasiones los links pueden no ser absolutos sino relativos y aparecer sin http. Añado una función para recoger los links (absolutos y relativos) pero sólo cuando son enlaces a otras páginas, no los que son a imágenes ni otras cosas. A ver si más gente se anima class PHPBot { function PHPBot (){ $ch = $this->ch; curl_setopt($ch, CURLOPT_HEADER , 1); // Include headers in response or not curl_setopt($ch, CURLOPT_RETURNTRANSFER , 1); // Return (don't print) answer of exec curl_setopt($ch, CURLOPT_USERAGENT , "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12"); curl_setopt($ch, CURLOPT_AUTOREFERER , true); // Isn't this great? curl_setopt($ch, CURLOPT_HTTPHEADER , array('Accept: */*', 'Accept-Language: en-us,en;q=0.5', 'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7')); } private function act($url, $params = false){ $ch = $this->ch; if ($params != false){ curl_setopt($ch, CURLOPT_POSTFIELDS , $this->myurlencode($params)); } else return $r; } private function myurlencode($dict){ $r = ""; foreach($dict as $key => $value) return $r; } private function get_urls($context){ $query = '/http?\:\/\/[^\" ]+/i'; return $result[0]; } function getLinks ($url){ $dom = new DOMDocument(); $p = $this->act($url); $links = $dom->getElementsByTagName('a'); foreach($links as $l) $r[] = $l->getAttribute('href'); return $r; } function get ($url){ return $this->act($url); } function post($url, $params){ return $this->act($url, $params); } }
|
|
|
En línea
|
|
|
|
Pablo Videla
|
Podrían comentar el codigo para explicar bien lo que hace, hay gente como yo que sabe la sintaxis de php pero no conoce bien las funciones porque no suele programar en ese lenguaje xD , de antemano, gracias.
Espero no haber estorbado acá.
|
|
|
En línea
|
|
|
|
|
|
|