SlideShare uma empresa Scribd logo
Gustavo Almeida
PHP Curl
$whois
cURL
Ferramenta de linha de comando para transferir dados usando
vários protocolos.
Client URL que significa "URL do cliente".
O PHP suporta libcurl, uma biblioteca criada por Daniel
Stenberg, que permite conectar-se com diferentes servidores
usando diferentes protocolos.
Php curl - Coleta de dados na web
exemplo de uma página qualquer (GET)
$handle = curl_init();
$url = "http://www.loteria.com/megasena/1234";
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($handle);
curl_close($handle);
echo $output;
exemplo 2 - efetuando um envio de formulário
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.site.com/contato/envio_form.php");
curl_setopt($ch, CURLOPT_POST, 1);
$formulario = [‘email’=>’gustavo@gmail.com’,’msg’=>’oi blz !’];
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($formulario));
//postvar1=value1&postvar2=value2&postvar3=value3
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close ($ch);
echo $html;
Php curl - Coleta de dados na web
https://192.168.44.55:8080/app.php?action=add&id=3556&qtd=2
Php curl - Coleta de dados na web
108
parâmetros
CURLOPT_
1 - fazendo a requisição (http client/server)
2 - capturando a resposta
Nao seria legal
capturar o
statusCode da
página, ou o
tamanho do
arquivo HTML?
www.http.cat (~ 98 codigos HTTP)
Checando o tamanho do arquivo/página recuperada
$ch = curl_init();
...
$data = curl_exec($ch);
$responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
if(curl_errno($ch)){
print curl_error($ch);
} else {
if($responseCode == "200") echo "servidor OK";
if(strlen($data)==$size) echo “resposta integra”;
// salvar conteúdo de $data no BD
}
curl_close($ch);
Sites com https
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
Para que o cURL nao procure por certificados SSL
Simulando requisição feita pelo Chrome no Windows
$agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36";
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
Simulando um cabeçalho Referer (anterior)
curl_setopt($ch, CURLOPT_REFERER, ‘site.com/index.php‘ );
Crawling - Captura de dados
robo.php
info GET
HTML
site X
info POST
formulário
site Y
API site Z
arquivo
csv site W
Requisições paralelas ?
non-blocking API calls. Not threads.
$nodes = [www.siteA.com , www.siteB.com , www.siteC.com , ...];
$total = count($nodes);
$curl_arr = [ ];
$master = curl_multi_init( );
for($i = 0; $i < $total; $i++) {
$url =$nodes[$i];
$curl_arr[$i] = curl_init($url);
curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle( $master, $curl_arr[$i] );
}
do {
curl_multi_exec($master,$running);
} while($running > 0);
for($i = 0; $i < $total; $i++)
$results[ ] = curl_multi_getcontent ( $curl_arr[$i] );
print_r($results);
Php curl - Coleta de dados na web
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.php');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=eu&senha=123");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name');
curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/site/tmp');
$answer = curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/perfil/1234');
$html_meu_perfil = curl_exec($ch);
Capturei o HTML do meu perfil
A partir deste
momento eu
estou 'logado'
URI com autenticação baseado em sessão do cliente
http://www.example.com/perfil/1234
Uma vez conhecido o esquema de URL
for($i=1;$i<10000000;$i++){
curl_setopt($ch, CURLOPT_URL, “http://www.example.com/perfil/$i” );
$html_deste_perfil = curl_exec($ch); //salvamos no Banco de Dados
}
E se fosse o hash (md5) ??
http://www.example.com/perfil/fsdfsrhh888i999kmmmerwe324dfsdfgdfg6456
for($i=1;$i<10000000;$i++) $url=’www.site.com/perfil/’.md5($i);
https://pt.wikipedia.org/wiki/Protocolo_de_Exclusao_de_Robos ( /robots.txt)
Scraping (varrer as informações desejadas)
Extrair conteúdos com Expressões Regulares (regex101.com) ou via árvore DOM
Php curl - Coleta de dados na web
screenshots (print screen)
$img = imagegrabscreen(); //só funciona no Windows
<?php
//Selenium Webdriver composer require facebook/webdriver
$url = 'https://google.com'; // definindo a url como a do google
$host = 'http://localhost:4444/wd/hub'; // Host default
$capabilities = DesiredCapabilities::chrome(); // escolhendo o driver como chrome
$driver = RemoteWebDriver::create($host, $capabilities, 5000); // criando conexão com o driver
$driver->get($url); // HTTP get na $url
$driver->takeScreenshot('/path/to/image.png');
http://bit.ly/phpcurl2019
www.LGA.com.br
github: lga37
slideshare: lga33
br.linkedin.com/in/lga37
Php curl - Coleta de dados na web

Mais conteúdo relacionado

Mais procurados

Aula 7 - Ataque de Força Bruta
Aula 7 - Ataque de Força BrutaAula 7 - Ataque de Força Bruta
Aula 7 - Ataque de Força Bruta
Carlos Henrique Martins da Silva
 
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e RoutesGeolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Luis Gustavo Almeida
 
A Threat Hunter Himself
A Threat Hunter HimselfA Threat Hunter Himself
A Threat Hunter Himself
Teymur Kheirkhabarov
 
Google Hacking - Explorando falhas de dispotivos
Google Hacking - Explorando falhas de dispotivosGoogle Hacking - Explorando falhas de dispotivos
Google Hacking - Explorando falhas de dispotivos
C H
 
宅學習 Firebase
宅學習 Firebase宅學習 Firebase
宅學習 Firebase
Wei chung chai
 
Pacu ~ Rhino Security
Pacu ~ Rhino SecurityPacu ~ Rhino Security
Pacu ~ Rhino Security
AWSMeetup
 
Privacidade By Design no Ciclo de Vida do Produto
Privacidade By Design no Ciclo de Vida do ProdutoPrivacidade By Design no Ciclo de Vida do Produto
Privacidade By Design no Ciclo de Vida do Produto
Douglas Siviotti
 
PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)
PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)
PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)
Changwan Jun
 
DBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse EngineeringDBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse Engineering
Sahil Dhar
 
Computação Forense
Computação ForenseComputação Forense
Computação Forense
Claudio Benossi
 
WAF 101
WAF 101WAF 101
Beautiful REST+JSON APIs with Ion
Beautiful REST+JSON APIs with IonBeautiful REST+JSON APIs with Ion
Beautiful REST+JSON APIs with Ion
Stormpath
 
CPBSB 2022 - Big Data e Machine Learning na Prática Construindo um Data Lake...
CPBSB 2022 - Big Data e  Machine Learning na Prática Construindo um Data Lake...CPBSB 2022 - Big Data e  Machine Learning na Prática Construindo um Data Lake...
CPBSB 2022 - Big Data e Machine Learning na Prática Construindo um Data Lake...
Cicero Joasyo Mateus de Moura
 
Why Task Queues - ComoRichWeb
Why Task Queues - ComoRichWebWhy Task Queues - ComoRichWeb
Why Task Queues - ComoRichWeb
Bryan Helmig
 
파이널프로젝트 발표자료 Ob_20211101 (2)
파이널프로젝트 발표자료 Ob_20211101 (2)파이널프로젝트 발표자료 Ob_20211101 (2)
파이널프로젝트 발표자료 Ob_20211101 (2)
kangsumin
 
Iso27001 sgsi
Iso27001 sgsiIso27001 sgsi
Iso27001 sgsi
Rafael Maia
 
Apresentação - ISO 27001
Apresentação - ISO 27001Apresentação - ISO 27001
Apresentação - ISO 27001
William Martins
 
Segurança da informação - Aula 7 - ISO 27002
Segurança da informação - Aula 7 - ISO 27002Segurança da informação - Aula 7 - ISO 27002
Segurança da informação - Aula 7 - ISO 27002
Cleber Fonseca
 
Técnicas de Invasão - INFOESTE 2015
Técnicas de Invasão - INFOESTE 2015Técnicas de Invasão - INFOESTE 2015
Técnicas de Invasão - INFOESTE 2015
C H
 
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
idsecconf
 

Mais procurados (20)

Aula 7 - Ataque de Força Bruta
Aula 7 - Ataque de Força BrutaAula 7 - Ataque de Força Bruta
Aula 7 - Ataque de Força Bruta
 
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e RoutesGeolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
 
A Threat Hunter Himself
A Threat Hunter HimselfA Threat Hunter Himself
A Threat Hunter Himself
 
Google Hacking - Explorando falhas de dispotivos
Google Hacking - Explorando falhas de dispotivosGoogle Hacking - Explorando falhas de dispotivos
Google Hacking - Explorando falhas de dispotivos
 
宅學習 Firebase
宅學習 Firebase宅學習 Firebase
宅學習 Firebase
 
Pacu ~ Rhino Security
Pacu ~ Rhino SecurityPacu ~ Rhino Security
Pacu ~ Rhino Security
 
Privacidade By Design no Ciclo de Vida do Produto
Privacidade By Design no Ciclo de Vida do ProdutoPrivacidade By Design no Ciclo de Vida do Produto
Privacidade By Design no Ciclo de Vida do Produto
 
PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)
PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)
PHP에서 GCM 푸시 빠르게 보내기 (feat. Async / Generator)
 
DBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse EngineeringDBI-Assisted Android Application Reverse Engineering
DBI-Assisted Android Application Reverse Engineering
 
Computação Forense
Computação ForenseComputação Forense
Computação Forense
 
WAF 101
WAF 101WAF 101
WAF 101
 
Beautiful REST+JSON APIs with Ion
Beautiful REST+JSON APIs with IonBeautiful REST+JSON APIs with Ion
Beautiful REST+JSON APIs with Ion
 
CPBSB 2022 - Big Data e Machine Learning na Prática Construindo um Data Lake...
CPBSB 2022 - Big Data e  Machine Learning na Prática Construindo um Data Lake...CPBSB 2022 - Big Data e  Machine Learning na Prática Construindo um Data Lake...
CPBSB 2022 - Big Data e Machine Learning na Prática Construindo um Data Lake...
 
Why Task Queues - ComoRichWeb
Why Task Queues - ComoRichWebWhy Task Queues - ComoRichWeb
Why Task Queues - ComoRichWeb
 
파이널프로젝트 발표자료 Ob_20211101 (2)
파이널프로젝트 발표자료 Ob_20211101 (2)파이널프로젝트 발표자료 Ob_20211101 (2)
파이널프로젝트 발표자료 Ob_20211101 (2)
 
Iso27001 sgsi
Iso27001 sgsiIso27001 sgsi
Iso27001 sgsi
 
Apresentação - ISO 27001
Apresentação - ISO 27001Apresentação - ISO 27001
Apresentação - ISO 27001
 
Segurança da informação - Aula 7 - ISO 27002
Segurança da informação - Aula 7 - ISO 27002Segurança da informação - Aula 7 - ISO 27002
Segurança da informação - Aula 7 - ISO 27002
 
Técnicas de Invasão - INFOESTE 2015
Técnicas de Invasão - INFOESTE 2015Técnicas de Invasão - INFOESTE 2015
Técnicas de Invasão - INFOESTE 2015
 
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
idsecconf2023 - Neil Armstrong - Leveraging IaC for Stealthy Infrastructure A...
 

Semelhante a Php curl - Coleta de dados na web

A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
ricardophp
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Michael Castillo Granados
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
Impacta Eventos
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
Vinícius Campitelli
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
Michel Ribeiro
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
Thiago Rigo
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdade
Luis Vendrame
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
Evandro Klimpel Balmant
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
Lucas Batistussi
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Willian Magalhães
 
React e Ratchet, async e websockets com PHP, por Gabriel Couto
React e Ratchet, async e websockets com PHP, por Gabriel CoutoReact e Ratchet, async e websockets com PHP, por Gabriel Couto
React e Ratchet, async e websockets com PHP, por Gabriel Couto
iMasters
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
Stanislaw Pusep
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
Flávio Lisboa
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
Dalton Martins
 
Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Program...
Aula 09  - Instruções preparadas e otimização de consultas do Mysql - Program...Aula 09  - Instruções preparadas e otimização de consultas do Mysql - Program...
Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Program...
Dalton Martins
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
Antonio Spinelli
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
metzen
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
Rodrigo Branas
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
Paulo Damas
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
Suissa
 

Semelhante a Php curl - Coleta de dados na web (20)

A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
PHP ao Extremo
PHP ao ExtremoPHP ao Extremo
PHP ao Extremo
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdade
 
Curso de Introdução - PHP
Curso de Introdução - PHPCurso de Introdução - PHP
Curso de Introdução - PHP
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
React e Ratchet, async e websockets com PHP, por Gabriel Couto
React e Ratchet, async e websockets com PHP, por Gabriel CoutoReact e Ratchet, async e websockets com PHP, por Gabriel Couto
React e Ratchet, async e websockets com PHP, por Gabriel Couto
 
Proxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testesProxy, Man-In-The-Middle e testes
Proxy, Man-In-The-Middle e testes
 
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes AuraPHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
PHP Conference Brasil 2013 - Aplicações PHP 5.4 com componentes Aura
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Program...
Aula 09  - Instruções preparadas e otimização de consultas do Mysql - Program...Aula 09  - Instruções preparadas e otimização de consultas do Mysql - Program...
Aula 09 - Instruções preparadas e otimização de consultas do Mysql - Program...
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
 
Otimização e Escalabilidade
Otimização e EscalabilidadeOtimização e Escalabilidade
Otimização e Escalabilidade
 
Criando serviços com AngularJS
Criando serviços com AngularJSCriando serviços com AngularJS
Criando serviços com AngularJS
 
Criando controle de acesso com php e my sql
Criando controle de acesso com php e my sqlCriando controle de acesso com php e my sql
Criando controle de acesso com php e my sql
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
 

Mais de Luis Gustavo Almeida

Curso de HTML5 CSS3 e JS
Curso de HTML5 CSS3 e JSCurso de HTML5 CSS3 e JS
Curso de HTML5 CSS3 e JS
Luis Gustavo Almeida
 
Criando uma blockchain com PHP
Criando uma blockchain com PHPCriando uma blockchain com PHP
Criando uma blockchain com PHP
Luis Gustavo Almeida
 
Php criptomoedas e blockchain
Php criptomoedas e blockchainPhp criptomoedas e blockchain
Php criptomoedas e blockchain
Luis Gustavo Almeida
 
Palestra de segurança em PHP - Hacking
Palestra de segurança em PHP - HackingPalestra de segurança em PHP - Hacking
Palestra de segurança em PHP - Hacking
Luis Gustavo Almeida
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
Luis Gustavo Almeida
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
Luis Gustavo Almeida
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
Luis Gustavo Almeida
 
Migrando para PHP7 - Novidades
Migrando para PHP7 - NovidadesMigrando para PHP7 - Novidades
Migrando para PHP7 - Novidades
Luis Gustavo Almeida
 

Mais de Luis Gustavo Almeida (8)

Curso de HTML5 CSS3 e JS
Curso de HTML5 CSS3 e JSCurso de HTML5 CSS3 e JS
Curso de HTML5 CSS3 e JS
 
Criando uma blockchain com PHP
Criando uma blockchain com PHPCriando uma blockchain com PHP
Criando uma blockchain com PHP
 
Php criptomoedas e blockchain
Php criptomoedas e blockchainPhp criptomoedas e blockchain
Php criptomoedas e blockchain
 
Palestra de segurança em PHP - Hacking
Palestra de segurança em PHP - HackingPalestra de segurança em PHP - Hacking
Palestra de segurança em PHP - Hacking
 
ReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHPReactPHP && programacao assincrona em PHP
ReactPHP && programacao assincrona em PHP
 
Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP Crawling - Coleta de dados na Web com PHP
Crawling - Coleta de dados na Web com PHP
 
Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017 Mini Curso PHP Twig - PHP Conference 2017
Mini Curso PHP Twig - PHP Conference 2017
 
Migrando para PHP7 - Novidades
Migrando para PHP7 - NovidadesMigrando para PHP7 - Novidades
Migrando para PHP7 - Novidades
 

Php curl - Coleta de dados na web

  • 3. cURL Ferramenta de linha de comando para transferir dados usando vários protocolos. Client URL que significa "URL do cliente". O PHP suporta libcurl, uma biblioteca criada por Daniel Stenberg, que permite conectar-se com diferentes servidores usando diferentes protocolos.
  • 5. exemplo de uma página qualquer (GET) $handle = curl_init(); $url = "http://www.loteria.com/megasena/1234"; curl_setopt($handle, CURLOPT_URL, $url); curl_setopt($handle, CURLOPT_RETURNTRANSFER, true); $output = curl_exec($handle); curl_close($handle); echo $output;
  • 6. exemplo 2 - efetuando um envio de formulário $ch = curl_init(); curl_setopt($ch, CURLOPT_URL,"http://www.site.com/contato/envio_form.php"); curl_setopt($ch, CURLOPT_POST, 1); $formulario = [‘email’=>’gustavo@gmail.com’,’msg’=>’oi blz !’]; curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($formulario)); //postvar1=value1&postvar2=value2&postvar3=value3 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $html = curl_exec($ch); curl_close ($ch); echo $html;
  • 11. 1 - fazendo a requisição (http client/server)
  • 12. 2 - capturando a resposta
  • 13. Nao seria legal capturar o statusCode da página, ou o tamanho do arquivo HTML?
  • 14. www.http.cat (~ 98 codigos HTTP)
  • 15. Checando o tamanho do arquivo/página recuperada $ch = curl_init(); ... $data = curl_exec($ch); $responseCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); $size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD); if(curl_errno($ch)){ print curl_error($ch); } else { if($responseCode == "200") echo "servidor OK"; if(strlen($data)==$size) echo “resposta integra”; // salvar conteúdo de $data no BD } curl_close($ch);
  • 16. Sites com https curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); Para que o cURL nao procure por certificados SSL
  • 17. Simulando requisição feita pelo Chrome no Windows $agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36"; curl_setopt($ch, CURLOPT_USERAGENT, $agent);
  • 18. Simulando um cabeçalho Referer (anterior) curl_setopt($ch, CURLOPT_REFERER, ‘site.com/index.php‘ );
  • 19. Crawling - Captura de dados
  • 20. robo.php info GET HTML site X info POST formulário site Y API site Z arquivo csv site W
  • 21. Requisições paralelas ? non-blocking API calls. Not threads.
  • 22. $nodes = [www.siteA.com , www.siteB.com , www.siteC.com , ...]; $total = count($nodes); $curl_arr = [ ]; $master = curl_multi_init( ); for($i = 0; $i < $total; $i++) { $url =$nodes[$i]; $curl_arr[$i] = curl_init($url); curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true); curl_multi_add_handle( $master, $curl_arr[$i] ); } do { curl_multi_exec($master,$running); } while($running > 0); for($i = 0; $i < $total; $i++) $results[ ] = curl_multi_getcontent ( $curl_arr[$i] ); print_r($results);
  • 24. $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/login.php'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, "login=eu&senha=123"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_COOKIESESSION, true); curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie-name'); curl_setopt($ch, CURLOPT_COOKIEFILE, '/var/www/site/tmp'); $answer = curl_exec($ch); curl_setopt($ch, CURLOPT_URL, 'http://www.example.com/perfil/1234'); $html_meu_perfil = curl_exec($ch); Capturei o HTML do meu perfil A partir deste momento eu estou 'logado' URI com autenticação baseado em sessão do cliente
  • 25. http://www.example.com/perfil/1234 Uma vez conhecido o esquema de URL for($i=1;$i<10000000;$i++){ curl_setopt($ch, CURLOPT_URL, “http://www.example.com/perfil/$i” ); $html_deste_perfil = curl_exec($ch); //salvamos no Banco de Dados } E se fosse o hash (md5) ?? http://www.example.com/perfil/fsdfsrhh888i999kmmmerwe324dfsdfgdfg6456 for($i=1;$i<10000000;$i++) $url=’www.site.com/perfil/’.md5($i);
  • 27. Scraping (varrer as informações desejadas)
  • 28. Extrair conteúdos com Expressões Regulares (regex101.com) ou via árvore DOM
  • 30. screenshots (print screen) $img = imagegrabscreen(); //só funciona no Windows <?php //Selenium Webdriver composer require facebook/webdriver $url = 'https://google.com'; // definindo a url como a do google $host = 'http://localhost:4444/wd/hub'; // Host default $capabilities = DesiredCapabilities::chrome(); // escolhendo o driver como chrome $driver = RemoteWebDriver::create($host, $capabilities, 5000); // criando conexão com o driver $driver->get($url); // HTTP get na $url $driver->takeScreenshot('/path/to/image.png');