Entendendo o que é URI, URL, URN e conhecendo as diferenças entre POST e GET

Explanações sobre o que é URI, URL, URN e conferindo na prática algumas diferenças entre POST e GET com PHP e HTML. Também tem um teste que verifica algumas diferenças entre POST e GET, um teste simples dos limites de caracteres que alguns navegadores suportam na barra de endereços e um teste simples de velocidade das solicitações POST e GET.

[ Hits: 4.022 ]

Por: Buckminster em 30/04/2024


Código do Teste de Tempo



Abaixo temos o arquivo "tempo.php" que calcula o tempo das requisições com três diferentes funções do php: file_get_contents, cURL e file.

Para medir o desempenho usei a função nativa hrtime(), função esta recomendada no manual do PHP para testes de desempenho.

O cálculo não é preciso, pois simplesmente pega-se o tempo do sistema no momento do envio e diminui-se do tempo do recebimento da requisição, mas para os presentes testes tal cálculo é perfeitamente aceitável.

Para os testes usei o URI 'https://www.vivaolinux.com.br/testarLogin.php', mas pode ser utilizada qualquer outro URI válido.

Caso descomentar as linhas com a função "var_dump" o código retornará a página com as imagens e não retornará todas as saídas.

Na próxima página (Tempo de Requisição 2) temos algumas saídas da execução do código abaixo.

tempo.php:

echo '<br>1 --------------------------------------------------------------------<br><br>';
// GET
// Usando file_get_contents
// URL para teste
$urlG_FGC = 'https://www.vivaolinux.com.br/testarLogin.php';


// Mede o tempo inicial da requisição
$tempoInicialG_FGC = hrtime(true);

// Faz a requisição GET
$respostaG_FGC = file_get_contents($urlG_FGC);

// Mede o tempo final da requisição
$tempoFinalG_FGC = hrtime(true);

// Calcula o tempo decorrido
//$tempoDecorridoG_FGC = round(($tempoFinalG_FGC - $tempoInicialG_FGC) * 1000, 2);
$tempoDecorridoG_FGC = round($tempoFinalG_FGC - $tempoInicialG_FGC);

// Exibe a resposta da requisição (para fins de depuração)
echo "Resposta da requisição GET (file_get_contents):<br>";
//var_dump($respostaG_FGC);

// Exibe o tempo decorrido: echo $variavel/1e+6; //nanosegundos para milisegundos
// // Exibe o tempo decorrido formatado com dois dígitos após o ponto
//echo "Tempo decorrido: {$tempoDecorridoG_FGC} ms<br>";
echo "Tempo decorrido: " .number_format($tempoDecorridoG_FGC/1e+6, 2, '.', ''). " ms<br>";

echo '<br>2 --------------------------------------------------------------------<br><br>';

// GET Usando cURL
// URL para teste
$urlG_URL = 'https://www.vivaolinux.com.br/testarLogin.php';
$formLogin = filter_input(INPUT_GET, 'formLogin', FILTER_UNSAFE_RAW);
$formSenha = filter_input(INPUT_GET, 'formSenha', FILTER_UNSAFE_RAW);
// Dados a serem enviados na requisição
$dadoG_URL = array('formLogin' => $formLogin, 'formSenha' => $formSenha,);

// Inicializa o cURL
//var_dump(function_exists('curl_init'));
$curlG_URL = curl_init();

// Define as opções do cURL
curl_setopt_array($curlG_URL, array(
    CURLOPT_URL => $urlG_URL,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPGET => true,
    //CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_POSTFIELDS => http_build_query($dadoG_URL),
    CURLOPT_TIMEOUT => 30, // Tempo limite da requisição em segundos
));

// Mede o tempo inicial da requisição
$tempoInicialG_URL = hrtime(true);

// Executa a requisição GET
$respostaG_URL = curl_exec($curlG_URL);

// Mede o tempo final da requisição
$tempoFinalG_URL = hrtime(true);

// Calcula o tempo decorrido
//$tempoDecorridoG_URL = round(($tempoFinalG_URL - $tempoInicialG_URL) * 1000, 2);
$tempoDecorridoG_URL = round($tempoFinalG_URL - $tempoInicialG_URL);

// Verifica se houve algum erro na requisição
if(curl_errno($curlG_URL)){
    echo 'Erro ao enviar a requisição: ' . curl_error($curlG_URL);
} else {

    // Exibe a resposta da requisição (para fins de depuração)
    echo "Resposta da requisição GET (cURL):<br>";
    //var_dump($respostaG_URL);
    if (array_key_exists("formSenha", $dadoG_URL)) {
    echo "O elemento "; $v = var_export($formSenha, true); echo $v; echo " está no array!<br>";
    }
    // Exibe o tempo decorrido: echo $variavel/1e+6; //nanosegundos para milisegundos
    //echo "Tempo decorrido: ".$tempoDecorridoG_URL/1e+6. "ms<br>";
    echo "Tempo decorrido: ".number_format($tempoDecorridoG_URL/1e+6, 2, '.', ''). " ms<br>";
}

// Fecha a conexão cURL
curl_close($curlG_URL);

echo '<br>3 --------------------------------------------------------------------<br><br>';
// POST com file_get_contents
// URL para onde será feita a requisição POST
$urlP_FGC = 'https://www.vivaolinux.com.br/testarLogin.php';

// Dados a serem enviados via POST
$dadoP_FGC = array(
    'formLogin' => $formLogin,
    'formSenha' => $formSenha,
);

// Configuração da requisição
$opcoesP_FGC = array(
    'http' => array(
        'method' => 'POST',
        'header' => 'Content-type: application/x-www-form-urlencoded',
        'content' => http_build_query($dadoP_FGC),
        'timeout' => 30, // Tempo limite de espera em segundos
    ),
);

// Início da contagem de tempo
$tempoInicialP_FGC = hrtime(true);

// Realiza a requisição POST
$respostaP_FGC = file_get_contents($urlP_FGC, false, stream_context_create($opcoesP_FGC));

// Fim da contagem de tempo
$tempoFinalP_FGC = hrtime(true);

// Calcula o tempo de requisição
$tempoDecorridoP_FGC = round($tempoFinalP_FGC - $tempoInicialP_FGC);

// Exibe a resposta da requisição (para fins de depuração)
echo "Resposta da requisição POST (file_get_contents):<br>";
//var_dump($respostaP_FGC);
if (array_key_exists("formLogin", $dadoP_FGC)) {
    echo "O elemento "; $v = var_dump($formLogin, true); echo $v; echo " está no array!<br>";
}
// Exibe o tempo de requisição
//echo "Tempo decorrido: {$tempoDecorridoP_FGC} ms<br>";
echo "Tempo decorrido: ".number_format($tempoDecorridoP_FGC/1e+6, 2, '.', ''). " ms<br>";

echo '<br>4 --------------------------------------------------------------------<br><br>';
// POST cURL
// URL para teste
$urlP_URL = 'https://www.vivaolinux.com.br/testarLogin.php';

// Dados a serem enviados na requisição
$dadoP_URL = array('formLogin' => $formLogin, 'formSenha' => $formSenha,);

// Inicializa o cURL
$curlP_URL = curl_init();

// Define as opções do cURL
curl_setopt_array($curlP_URL, array(
    CURLOPT_URL => $urlP_URL,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    //CURLOPT_SSL_VERIFYHOST => 0,
    CURLOPT_SSL_VERIFYPEER => 0,
    CURLOPT_POSTFIELDS => http_build_query($dadoP_URL),
    CURLOPT_TIMEOUT => 30, // Tempo limite da requisição em segundos
));

// Mede o tempo inicial da requisição
$tempoInicialP_URL = hrtime(true);

// Executa a requisição POST
$respostaP_URL = curl_exec($curlP_URL);

// Mede o tempo final da requisição
$tempoFinalP_URL = hrtime(true);

// Calcula o tempo decorrido
//$tempoDecorridoP_URL = round(($tempoFinalP_URL - $tempoInicialP_URL) * 1000, 2);
$tempoDecorridoP_URL = round($tempoFinalP_URL - $tempoInicialP_URL);

// Verifica se houve algum erro na requisição
if(curl_errno($curlP_URL)){
    echo 'Erro ao enviar a requisição: ' . curl_error($curlP_URL);
} else {

    // Exibe a resposta da requisição (para fins de depuração)
    echo "Resposta da requisição POST (cURL):<br>";
    //var_dump($respostaP_URL);
    if (array_key_exists("formSenha", $dadoP_URL)) {
    echo "O elemento "; $v = var_export($formSenha, true); echo $v; echo " está no array!<br>";
}
    // Exibe o tempo decorrido
    //echo "Tempo decorrido: {$tempoDecorridoP_URL} ms<br>";
    echo "Tempo decorrido: ".number_format($tempoDecorridoP_URL/1e+6, 2, '.', ''). " ms<br>";
}

// Fecha a conexão cURL
curl_close($curlP_URL);

/******************************************************************************/
// GET e POST com file()
// Função para medir o tempo decorrido
function calcularTempo($tempoInicial) {
    $tempoFinal = hrtime(true);
    return round($tempoFinal - $tempoInicial);
}

// URL
$url = 'https://www.vivaolinux.com.br/testarLogin.php';

// Medição do tempo para requisição GET
$tempoInicialGET = hrtime(true);
$respostaGET = file($url); // Faz a requisição GET
$tempoGET = calcularTempo($tempoInicialGET);

// Medição do tempo para requisição POST
$tempoInicialPOST = hrtime(true);
$dadoPOST = array('formLogin' => $formLogin, 'formSenha' => $formSenha);
$opcoes = array(
        'http' => array(
        'Content-Type' => 'application/x-www-form-urlencoded
',
        'method' => 'POST',
        'header' => 'Content-Type: application/x-www-form-urlencoded',
        'content' => http_build_query($dadoPOST)
    )
);
$contexto = stream_context_create($opcoes);
$respostaPOST = file($url, false, $contexto); // Faz a requisição POST
$tempoPOST = calcularTempo($tempoInicialPOST);

echo '<br>5 --------------------------------------------------------------------<br><br>';
// Exibe a resposta da requisição (para fins de depuração) echo $variavel/1e+6; //nanosegundos para milisegundos
echo "Resposta da requisição GET (file):<br>";
//var_dump($respostaGET);
echo "Tempo decorrido: ".number_format($tempoGET/1e+6, 2, '.', ''). " ms<br>";

echo '<br>6 --------------------------------------------------------------------<br><br>';
// Exibe a resposta da requisição (para fins de depuração)
echo "Resposta da requisição POST (file):<br>";
//var_dump($respostaPOST);
if (array_key_exists("formLogin", $dadoPOST)) {
    echo "O elemento "; $v = var_dump($formLogin, true); echo $v; echo " está no array!<br>";
}
echo "Tempo decorrido: ".number_format($tempoPOST/1e+6, 2, '.', ''). " ms<br>";
echo '<br>----------------------------------------------------------------------<br><br>';

Segue na próxima seção.

Página anterior     Próxima página

Páginas do artigo
   1. Entendendo o que é URI, URL, URN
   2. POST e GET
   3. Códigos dos Testes
   4. Execução dos Testes 1
   5. Execução dos Testes 2
   6. Código do Teste de Tempo
   7. Tempo de Solicitação 1
   8. Tempo de Solicitação 2
   9. Conclusão
Outros artigos deste autor

Manual do IPtables - Comentários e sugestões de regras

Instalação do PostgreSQL, Apache2 e PHP8 no Debian Buster 10 e no Stretch 9

Instalação do Comodo Antivirus para Linux (CAVL) resolvendo o problema de dependências

Instalar certificado SSL/TLS digital válido gratuito no Linux

Manual traduzido do Squid - Parte 3

Leitura recomendada

Uma introdução à biblioteca GD

Solução open source para clínicas médicas

Funções da categoria Miscelânea do PHP

Lista de extensões preferidas para Joomla!

Gerando gráficos com PHP e highcharts.com

  
Comentários
[1] Comentário enviado por maurixnovatrento em 23/06/2024 - 23:35h

Excelente artigo e bem completo.

______________________________________________________________________
Inscreva-se no meu Canal: https://www.youtube.com/@LinuxDicasPro
Repositório GitHub do Canal: https://github.com/LinuxDicasPro
Grupo do Telegram: https://t.me/LinuxDicasPro
Meu GitHub Pessoal: https://github.com/mxnt10


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts