cURL. Feita para usar e abusar
Cedo ou tarde, todo programador irá precisar fazer uma conexão com algum página para enviar ou buscar alguma informação (ou fazer os dois). É ai que você pede ajuda ao cURL.
cURL se você está entre nós, dê um sinal.
Para saber se temos a biblioteca em nosso servidor, abra um arquivo PHP e insira o código abaixo (Só o código):
1
<?php phpinfo();
Chame o arquivo na URL, ele deverá mostrar tudo que tem no seu servidor, procure por “cURL support”, se estiver marcado como enabled, então você poderá usar, caso contrário, chame o pessoal do suporte e solicite a instalação.
Mão na massa
Agora que sabemos que temos o cURL, é hora de começar a mágica, primeira coisa a ser feita é iniciar o cURL chamando a função curl_init(), essa função retornará um ponteiro que usaremos para passar os outros parâmetros do cURL, então guardaremos o resultado em uma variável.
1
$ch = curl_init();
A partir daqui, todos parâmetros que precisar passar para o cURL precisaremos usar a função curl_setopt(), esta função precisa do ponteiro do cURL, o parâmetro, e o valor do parâmetro.
Primeiro e obrigatório será a URL
1
curl_setopt($ch, CURLOPT_URL, 'http://sounoob.com.br/labs/pagseguro-test-curl');
Agora é só mandar executar a ação.
1
curl_exec($ch);
E como boa prática, fechamos a conexão, para liberar memória.
1
curl_close($ch);
Com apenas esses passos o PHP irá capturar toda informação da URL que definimos e irá exibir na tela. Não é bem o que queremos, seria interessante se pudêssemos manipular isso. Para isso antes de mandar executa a ação incluiremos outro parâmetro informando que queremos o conteúdo da URL como uma string.
1
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
Agora no momento que mandarmos executar, a função curl_exec irá retornar os dados, então precisaremos jogar esses dados em uma variável para ser tratada futuramente.
1
2
$data = curl_exec($ch);
//Em $data teremos o retorno do site, poderemos manipular essa informação como quiser.
Enviando informações para a URL de destino via GET
GET (Ou querystring) é a forma mais simples que existe, basta apenas injetar todos dados na URL e pronto, a página de destino já estará recendo os dados.
1
curl_setopt($ch, CURLOPT_URL, 'http://sounoob.com.br/labs/pagseguro-test-curl?parameter1=value¶meter2=secondevalue');
Funcionou, mas não aconselho usar desta forma, fica feio e difícil de entender. Ao invés disso utilize um array para distribuir as informações a serem enviadas e depois use a função http_build_query para formatar no padrão.
1
2
3
4
5
6
7
8
9
10
11
//distribuindo a informação a ser enviada
$queryString = array(
'parameter1' => 'value',
'parameter2' => 'secondevalue'
);
//Monta a URL
$url = 'http://sounoob.com.br/labs/pagseguro-test-curl?' . http_build_query($queryString);
//envia a URL como parâmetro para o cURL;
curl_setopt($ch, CURLOPT_URL, $url);
Melhor assim né? Outros quem for dar manutenção ao seu código irá agradecer também…
Enviando via POST
No caso do POST devemos usar um parâmetro adicional em nossa biblioteca CURLOPT_POSTFIELDS. Este parâmetro recebe como valor um array, que irá ser enviado como POST. Simples né?
1
2
3
4
5
6
7
//distribuindo a informação a ser enviada
$post = array(
'post1' => 'postvalue',
'post2' => 'othervalue'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
Como enviar XML?
Para enviar o XML utilizaremos a mesma forma que enviamos um POST, só que ao invés de enviar um array, enviaremos o XML como string e passaremos um novo parâmetro: O cabeçalho, nele informaremos que estamos enviando um XML com o encoding utf-8
1
2
3
4
5
6
7
8
9
10
11
12
//Montando o XML
$xml = '<?xml version="1.0" encoding="utf-8">
<xml>
<parameter1>value</parameter1>
<parameter1>secondevalue</parameter1>
</xml>';
//Enviando o XML como POST
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
//Informando que estamos enviando um XML com encoding utf-8
curl_setopt($ch, CURLOPT_HTTPHEADER, Array('Content-Type: application/xml; charset=utf-8'));
Algumas vezes alguns servidores possuem certificados de segurança e o cURL possui a opção de verificar se estes certificados é valido ou não. Não iremos abordar isso neste tutorial, mas… se precisar fazer uma conexão segura, desative a verificação SSL (Mas procure aprender futuramente sobre isso)
1
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Pronto. Agora conseguimos fazer o básico com o cURL.
Para facilitar a vida algumas pessoas costumam jogar isso em alguma função assim, não precisa ficar escrevendo todo código toda vez, veja um exemplo
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function curlExec($url, $post = NULL, array $header = array()){
//Inicia o cURL
$ch = curl_init($url);
//Pede o que retorne o resultado como string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//Envia cabeçalhos (Caso tenha)
if(count($header) > 0) {
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
}
//Envia post (Caso tenha)
if($post !== null) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
//Ignora certificado SSL
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//Manda executar a requisição
$data = curl_exec($ch);
//Fecha a conexão para economizar recursos do servidor
curl_close($ch);
//Retorna o resultado da requisição
return $data;
}
o cURL não é só isso. Dá para fazer muito mais com ele, recomendo a leitura da documentação no link abaixo: