Calculando frete com a biblioteca cURL em PHP
A biblioteca cURL possibilita emular um browser e invocar qualquer recurso web com alto grau de controle sobre o acesso, parametrizando requisições, obtendo e tratando as respostas.
Suporta vários protocolos como, por exemplo: FTP, LDAP, HTTPS, telnet, uso de proxie, cookie, autenticação, upload em formulário HTTP e outros.
Nem sempre funções como fopen e file_get_contents resolvem. Pode ser necessário especificar o método de envio (GET ou POST), preencher formulários automaticamente, informar login e senha (conteúdo protegido) ou selecionar arquivos para upload.
Muito útil no desenvolvimento de robôs, unidades de teste, na intermediação de transações com operadoras de cartões de crédito, chamadas a outros sites (transformando os resultados), na utilização de serviços disponíveis em outros sistemas web, requisição de páginas que exijam suporte a cookies etc.
Nesse exemplo vamos implementar o cálculo de frete junto aos Correios (típico para sistemas de comércio eletrônico) utilizando um script oferecido pela Locaweb.
O objetivo é submeter dados pra esse recurso e tratar o resultado dentro de nossa aplicação, realizando a intermediação sem que haja o uso explícito do recurso - imperceptível ao usuário.
Essa vantagem proporciona conforto na navegação pois as requisições são feitas a partir do próprio ambiente e o resultado implícito é devidamente formatado e visualizado na propria interface.
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, "http://comercio.locaweb.com.br/correios/calcula_sedex.asp"); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, cepOrig=$cep_origem&cepDest=$cep&pesoDeclarado=$peso_total&vlrDeclarado=$preco_total&metodo=leitura"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $retorno = curl_exec($ch); curl_close($ch);
Dica: certifique-se de utilizar CEP sem traço, valores com vírgula (não ponto), peso arredondado e tratar o conteúdo armazendo em $retorno da forma que desejar.
Mais informações em:
http://br.php.net/manual/pt_BR/ref.curl.php
e no site oficial http://curl.haxx.se/