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: 1.781 ]

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

Instalar e configurar o Nftables com exemplos básicos de configurações

Squid - Entendendo um pouco as configurações

Compilação de Kernel

Instalação do Ventoy, programa para criar pendrives inicializáveis

Manual traduzido do Squid - Parte 3

Leitura recomendada

Ninguém planeja fracassar, mas muitos fracassam por não planejar

Debugando aplicações PHP usando phpdbg - parte 01

O uso de templates em PHP

Requisições assíncronas em PHP usando AJAX - Parte I

Instalação do MediaWiki em uma Project web do SourceForge

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts