Explorando a API etechpt.com com PHP: Diferentes Abordagens
Este guia detalha várias maneiras de interagir com a API etechpt.com usando PHP. Examinaremos diversas abordagens, desde funções nativas até bibliotecas externas.
Vamos explorar como utilizar a API etechpt.com com `file_get_contents`, a biblioteca Guzzle, HTTPful, e o cliente HTTPS do Symfony, proporcionando uma visão abrangente das opções disponíveis.
O que é a API etechpt.com?
A etechpt.com oferece um conjunto de ferramentas online gratuitas para monitorar o desempenho de sites. Entre essas ferramentas, encontramos analisadores de links quebrados, verificadores de tempo de carregamento e de DNS. Essas funcionalidades estão acessíveis tanto pela interface web quanto pela API.
A API é baseada em HTTP e acessível a partir de qualquer linguagem de programação com uma biblioteca cliente HTTP. Ela oferece um plano gratuito com recursos generosos, permitindo o uso sem a necessidade de dados de pagamento iniciais.
O que Iremos Construir
Nosso objetivo é desenvolver um script executado via linha de comando que calcula o tempo de carregamento do site do Google e exibe esse valor no terminal. Este projeto será implementado com diferentes clientes HTTP do PHP, mostrando como interagir com a API.
Utilizaremos funções internas, como `file_get_contents()` e `php-curl`, além da biblioteca Guzzle PHP. Apesar de serem exemplos básicos, eles ilustram os fundamentos do uso da API etechpt.com.
Pré-requisitos
Para acompanhar este guia, é necessário ter conhecimento prévio de PHP e tê-lo instalado em seu computador. Adicionalmente, o Composer será necessário para gerenciar as extensões.
Além disso, você precisará de um editor de texto para escrever o código. Neste caso, usaremos o Visual Studio Code, um editor de código aberto popular da Microsoft, disponível para download no site oficial.
Visão Geral da API etechpt.com
A API etechpt.com possui vários endpoints, dependendo da operação desejada. A documentação completa dos endpoints pode ser encontrada na página de documentação da API.
Criando uma Conta etechpt.com
Para iniciar o uso da API, crie uma conta na página inicial da API. Após o registro, você será redirecionado ao painel, onde encontrará sua chave de API. Esta chave será necessária em todas as requisições. Por segurança, minha chave de API foi removida da imagem.
Cada solicitação de API requer a chave como um cabeçalho de solicitação. Mostraremos em breve como fazer isso.
Com a conta criada e o PHP instalado, podemos começar a construir o projeto.
Criando a Pasta do Projeto
Crie uma pasta para armazenar os arquivos do projeto e adicione os seguintes arquivos:
- .env
- with_curl.php
- with_file_get_contents.php
- with_guzzle.php
Em seguida, utilize o seguinte comando para instalar as extensões `vlucas/phpdotenv` e `guzzlehttp/guzzle`:
composer require vlucas/phpdotenv guzzlehttp/guzzle
A estrutura da pasta do seu projeto deve ser similar a:
Agora, abra o arquivo `.env` e adicione a seguinte linha, substituindo `
API_KEY=<your-api-key>
Utilizando `file_get_contents()`
`file_get_contents()`, função nativa do PHP, é a primeira abordagem para realizar requisições HTTP. A assinatura da função é:
file_get_contents(path, include_path, context)
Embora seja comum seu uso para leitura de arquivos locais, podemos empregá-la para acessar recursos web, como dados retornados por endpoints de API.
Comece abrindo o arquivo `with_get_contents.php` e adicionando o código PHP padrão:
<?php // código inserido aqui ?>
Agora, carregue as extensões:
require_once('vendor/autoload.php');
Em seguida, carregue as variáveis de ambiente, incluindo a chave de API:
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load();
Agora, defina a carga útil, os dados que serão enviados no corpo da requisição:
$payload = json_encode([ "url" => "https://www.google.com", "proxyCountry" => "us", "followRedirect" => true ]);
Criamos a variável `$payload` com os parâmetros necessários: `url` (endereço do site), `proxyCountry` (país do servidor proxy) e `followRedirect` (seguir ou não redirecionamentos).
`proxyCountry` pode ser `us`, `in`, `cn`, `uk` ou `fr`. Mais detalhes podem ser encontrados na documentação.
`followRedirect` define se o servidor deve seguir redirecionamentos e medir o tempo de resposta da última resposta ou do primeiro redirecionamento.
Crie as opções para configurar a requisição:
$options = [ "http" => [ "method" => "POST", "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']), "content" => $payload ] ];
Definimos que o método HTTP é POST e incluímos dois cabeçalhos: `Content-Type` para JSON e `x-api-key` com a chave da API do arquivo `.env`.
Crie o contexto da requisição:
$context = stream_context_create($options);
Faça a requisição e armazene a resposta:
$response = file_get_contents("https://api.etechpt.com/loadtime", false, $context);
Realizamos a solicitação para `https://api.etechpt.com/loadtime`. O segundo parâmetro `false` indica para não usar o caminho, e passamos o contexto criado anteriormente.
Exiba a resposta:
echo "Loadtime: " . json_decode($response)->data->total . "n";
O código completo:
<?php require_once('vendor/autoload.php'); $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $payload = json_encode([ "url" => "https://www.google.com", "proxyCountry" => "us", "followRedirect" => true ]); $options = [ "http" => [ "method" => "POST", "header" => array("Content-Type: application/json", "x-api-key : " . $_ENV['API_KEY']), "content" => $payload ] ]; $context = stream_context_create($options); $response = file_get_contents("https://api.etechpt.com/loadtime", false, $context); echo "Loadtime: " . json_decode($response)->data->total . "n"; ?>
Ao executar o arquivo via terminal:
php with_file_get_contents.php
A saída esperada será:
Loadtime: 81
Utilizando cURL
cURL é uma ferramenta de linha de comando para fazer requisições URL. Em PHP, usamos a extensão `php-curl`. Para começar, abra `with_curl.php` e adicione o código PHP padrão:
<?php // Novo código aqui ?>
Importe as extensões e carregue a variável `API_KEY` do arquivo `.env`:
require_once('vendor/autoload.php'); $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load();
Crie um array para armazenar os cabeçalhos:
$header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']];
Definimos dois cabeçalhos: `Content-type` e `x-api-key`.
Defina o corpo da requisição:
$body = json_encode([ "url" => "google.com", "proxyCountry" => "us", "followRedirect" => true ]);
Crie uma sessão cURL com a função `curl_init()`:
$ch = curl_init("https://api.etechpt.com/loadtime");
Configure a sessão com as opções, cabeçalho e corpo da requisição:
curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_HTTPHEADER => $header, CURLOPT_POSTFIELDS => $body ]);
Execute a requisição:
$response = curl_exec($ch);
Feche a sessão para liberar recursos:
curl_close($ch);
Exiba a resposta:
var_dump($response);
O código completo:
<?php require_once('vendor/autoload.php'); $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $header = ["Content-type: application/json", "x-api-key: " . $_ENV['API_KEY']]; $body = json_encode([ "url" => "google.com", "proxyCountry" => "us", "followRedirect" => true ]); $ch = curl_init("https://api.etechpt.com/loadtime"); curl_setopt_array($ch, [ CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_HTTPHEADER => $header, CURLOPT_POSTFIELDS => $body ]); $response = curl_exec($ch); curl_close($ch); var_dump($response); ?>
Ao executar o script com `php with_curl.php`, a saída deve ser semelhante a:
{"timestamp":1666083632547,"apiStatus":"success","apiCode":200,"meta":{"url":"google.com","followRedirect":true,"redirectedURL":"https://www.google.com/?gws_rd=ssl","test":{"id":"d20h1hb409qbfwm0g534l51asugpi5hl"}},"data":{"dns":12,"connect":17,"tls":6,"send":21,"wait":110,"total":114}}bool(true)
A requisição foi bem-sucedida, e a API retornou dados JSON. Estes podem ser utilizados da maneira desejada.
Utilizando Guzzle
Por fim, usaremos o Guzzle para criar o script. Inicialmente, adicione o código padrão do PHP em `with_guzzle.php`:
<?php // Código aqui ?>
Importe as extensões, o objeto `Guzzle\Client` e `GuzzleHttp\Psr7\Request`, e carregue as variáveis de ambiente:
require_once('vendor/autoload.php'); use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request;
Carregue as variáveis de ambiente:
$dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load();
Instancie um cliente HTTP Guzzle:
$client = new Client();
Crie os cabeçalhos para a requisição:
$headers = [ 'x-api-key' => $_ENV['API_KEY'], 'Content-Type' => 'application/json' ];
Defina o corpo da requisição:
$body = json_encode([ "url" => "google.com", "proxyCountry" => "us", "followRedirect" => true ]);
Faça a requisição instanciando a classe `Request`, passando URL, cabeçalho e corpo:
$request = new Request('POST', 'https://api.etechpt.com/loadtime', $headers, $body);
Envie a requisição:
$response = $client->sendAsync($request)->wait();
Obtenha o corpo da resposta:
$response_body = $response->getBody();
Decodifique a resposta JSON e imprima o tempo de carregamento:
echo "Loadtime: " . json_decode($response_body)->data->total . "n";
O código completo:
<?php require_once('vendor/autoload.php'); use GuzzleHttp\Client; use GuzzleHttp\Psr7\Request; $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $client = new Client(); $headers = [ 'x-api-key' => $_ENV['API_KEY'], 'Content-Type' => 'application/json' ]; $body = json_encode([ "url" => "google.com", "proxyCountry" => "us", "followRedirect" => true ]); $request = new Request('POST', 'https://api.etechpt.com/loadtime', $headers, $body); $response = $client->sendAsync($request)->wait(); $response_body = $response->getBody(); echo "Loadtime: " . json_decode($response_body)->data->total . "n"; ?>
Ao executar o script com `php with_guzzle.php`, a saída deve ser semelhante a:
Loadtime: 130
Conclusão
Neste artigo, exploramos várias formas de utilizar clientes HTTP em projetos PHP para interagir com a API etechpt.com.
Embora os scripts apresentados usem a linha de comando como saída, em projetos reais, a resposta pode ser exibida em páginas web ou escrita em arquivos. Os exemplos mostrados ilustram os conceitos básicos de como usar a API etechpt.com. Para usar outros endpoints, ajuste a URL e os parâmetros do corpo da requisição.
Você também pode ter interesse em como usar a API de pesquisa de DNS etechpt.com em Javascript.