Testes Avançados de Conectividade com cURL
Agora que você entende os testes básicos de conectividade, vamos explorar recursos mais avançados do cURL que podem ajudar na solução de problemas e testes detalhados.
Usando o Modo Verboso para Depuração Detalhada
O modo verboso (opção -v) é inestimável para solucionar problemas de conectividade, pois mostra todo o processo de requisição e resposta:
curl -v https://example.com
A saída será abrangente, mostrando a resolução DNS, o handshake TLS, os cabeçalhos da requisição, os cabeçalhos da resposta e muito mais:
* Trying 93.184.216.34:443...
* Connected to example.com (93.184.216.34) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS handshake, Certificate (11):
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
* TLSv1.3 (IN), TLS handshake, Finished (20):
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server accepted h2
* Server certificate:
* subject: C=US; ST=California; L=Los Angeles; O=Internet Corporation for Assigned Names and Numbers; CN=www.example.org
* start date: Nov 24 00:00:00 2022 GMT
* expire date: Nov 24 23:59:59 2023 GMT
* subjectAltName: host "example.com" matched cert's "example.com"
* issuer: C=US; O=DigiCert Inc; CN=DigiCert TLS RSA SHA256 2020 CA1
* SSL certificate verify ok.
* using HTTP/2
* h2 [:method: GET]
* h2 [:path: /]
* h2 [:scheme: https]
* h2 [:authority: example.com]
* h2 [user-agent: curl/7.81.0]
* h2 [accept: */*]
* Using Stream ID: 1
> GET / HTTP/2
> Host: example.com
> user-agent: curl/7.81.0
> accept: */*
>
* TLSv1.3 (IN), TLS handshake, Newsession Ticket (4):
* Connection state changed (MAX_CONCURRENT_STREAMS == 100)!
< HTTP/2 200
< age: 587269
< cache-control: max-age=604800
< content-type: text/html; charset=UTF-8
< date: Tue, 28 Mar 2023 12:40:01 GMT
< etag: "3147526947+ident"
< expires: Tue, 04 Apr 2023 12:40:01 GMT
< last-modified: Thu, 17 Oct 2019 07:18:26 GMT
< server: ECS (nyb/1D2B)
< vary: Accept-Encoding
< x-cache: HIT
< content-length: 1256
<
<!doctype html>
<html>
<head>
<title>Example Domain</title>
<!-- More HTML content -->
</head>
<body>
<div>
<h1>Example Domain</h1>
<p>This domain is for use in illustrative examples in documents...</p>
<!-- More content -->
</div>
</body>
</html>
* Connection #0 to host example.com left intact
Esta saída detalhada ajuda você a identificar exatamente onde uma conexão pode estar falhando.
Testando Diferentes Métodos HTTP
Vamos testar uma requisição POST para um endpoint de API de teste:
curl -X POST -d "name=test&email=test@example.com" https://httpbin.org/post
Este comando:
-X POST: Especifica uma requisição POST
-d "name=test&email=test@example.com": Envia dados de formulário na requisição
Você deve receber uma resposta JSON mostrando seus dados enviados:
{
"args": {},
"data": "",
"files": {},
"form": {
"email": "test@example.com",
"name": "test"
},
"headers": {
"Accept": "*/*",
"Content-Length": "32",
"Content-Type": "application/x-www-form-urlencoded",
"Host": "httpbin.org",
"User-Agent": "curl/7.81.0",
"X-Amzn-Trace-Id": "Root=1-642295b1-0d2340ef34f2e8ea6270241a"
},
"json": null,
"origin": "198.51.100.42",
"url": "https://httpbin.org/post"
}
Testando com Cabeçalhos Personalizados
Muitas APIs exigem cabeçalhos específicos para autenticação ou para especificar o tipo de conteúdo. Vamos testar isso:
curl -H "User-Agent: MyCustomAgent" -H "Authorization: Bearer test-token" https://httpbin.org/headers
Este comando:
-H "User-Agent: MyCustomAgent": Define um cabeçalho User-Agent personalizado
-H "Authorization: Bearer test-token": Define um cabeçalho Authorization
A resposta mostrará os cabeçalhos enviados em sua requisição:
{
"headers": {
"Accept": "*/*",
"Authorization": "Bearer test-token",
"Host": "httpbin.org",
"User-Agent": "MyCustomAgent",
"X-Amzn-Trace-Id": "Root=1-642295c3-73cac0a73b34b1c93a8ce520"
}
}
Testando Tempos de Resposta para Diferentes Endpoints
Vamos criar um script para comparar os tempos de resposta de diferentes servidores:
nano response_time.sh
Adicione o seguinte conteúdo:
#!/bin/bash
echo "Testando tempos de resposta..."
for site in google.com bing.com baidu.com duckduckgo.com yahoo.com; do
echo -n "$site: "
curl -s -o /dev/null -w "%{time_total}s" "https://$site"
echo ""
done
echo "Teste completo!"
Salve o arquivo e torne-o executável:
chmod +x response_time.sh
Execute o script:
./response_time.sh
A saída mostrará o tempo de resposta para cada site:
Testando tempos de resposta...
google.com: 0.187s
bing.com: 0.232s
baidu.com: 0.412s
duckduckgo.com: 0.298s
yahoo.com: 0.342s
Testing complete!
Isso é útil para comparar o desempenho de diferentes servidores ou monitorar o desempenho de um servidor ao longo do tempo.
Testando a Conectividade TCP para Portas Específicas
Às vezes, você precisa testar se uma porta específica está aberta em um servidor. cURL pode ser usado para isso também:
curl -v telnet://example.com:80
Se a porta estiver aberta, você verá uma mensagem de conexão bem-sucedida:
* Trying 93.184.216.34:80...
* Connected to example.com (93.184.216.34) port 80 (#0)
Pressione Ctrl+C para encerrar a conexão.
Da mesma forma, você pode testar conexões seguras:
curl -v https://example.com:443
A saída verbosa mostrará se a conexão foi bem-sucedida ou se houve algum problema.