cURL to terminalowe narzędzie służące do transferu danych z użyciem adresów URL.
Programiści i specjaliści wsparcia technicznego często wykorzystują polecenie cURL do diagnostyki problemów z aplikacjami internetowymi. cURL jest narzędziem wieloplatformowym, dostępnym dla systemów Windows, macOS i Linux.
Poniżej prezentujemy kilka najczęściej wykorzystywanych składni wraz z przykładami, które mogą okazać się pomocne.
Sprawdzanie dostępności adresu URL
W systemach opartych na UNIX, pierwszym krokiem przy próbie połączenia z zewnętrznym adresem URL jest weryfikacja jego dostępności za pomocą polecenia curl.
curl adres_url.com
Polecenie nie generuje żadnego wyjścia w przypadku powodzenia. Jeśli połączenie z serwerem jest niemożliwe, pojawią się błędy, np. informacja o niemożności rozwiązania nazwy hosta.
[[email protected] tmp]# curl nieistniejacyadres.com curl: (6) Could not resolve host: nieistniejacyadres.com; Unknown error [[email protected] tmp]#
Zapisywanie zawartości URL/URI do pliku
W sytuacji, gdy konieczne jest zapisanie zawartości adresu URL lub identyfikatora URI do pliku, można posłużyć się następującą konstrukcją:
curl https://adres_url.com > nazwa_pliku.html
Przykład:
[[email protected] tmp]# curl https://przykladowa.strona.pl > /tmp/strona.html % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 12345 0 12345 0 0 56789 0 --:--:-- --:--:-- --:--:-- 123456 [[email protected] tmp]#
Powyższy przykład spowoduje zapisanie całej treści z przykladowa.strona.pl do pliku /tmp/strona.html.
Wyświetlanie nagłówków żądania i odpowiedzi
Podczas rozwiązywania problemów, przydatne jest zweryfikowanie poprawności przesyłanych i otrzymywanych nagłówków.
curl -v adres_url.com
Przykład:
[[email protected] tmp]# curl -v https://blog.przykladowy.pl * Połączenie z blog.przykladowy.pl port 443 (#0) * Próba połączenia z 123.45.678.90... * Połączono z blog.przykladowy.pl (123.45.678.90) port 443 (#0) * Inicjalizacja NSS z certyfikatem: sql:/etc/pki/nssdb * Certyfikat CA: /etc/pki/tls/certs/ca-bundle.crt CApath: none * Połączenie SSL przy użyciu TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 * Certyfikat serwera: * temat: CN=ssl123456.cloudflaressl.com,OU=PositiveSSL Multi-Domain,OU=Domain Control Validated * data rozpoczęcia: 07 Lis 00:00:00 2019 GMT * data ważności: 15 Maj 23:59:59 2020 GMT * nazwa pospolita: ssl123456.cloudflaressl.com * wystawca: CN=COMODO ECC Domain Validation Secure Server CA 2,O=COMODO CA Limited,L=Salford,ST=Greater Manchester,C=GB > GET / HTTP/1.1 > User-Agent: curl/7.29.0 > Host: blog.przykladowy.pl > Accept: */* > < HTTP/1.1 200 OK < Data: Sob, 09 Lis 2019 19:41:37 GMT < Content-Type: text/html; charset=UTF-8 < Transfer-Encoding: chunked < Connection: keep-alive < Set-Cookie: __cfduid=abc123def456ghi789jklm0123456; expires=Niedz, 08-Lis-20 19:41:37 GMT; path=/; domain=.blog.przykladowy.pl; HttpOnly; Secure < Vary: Accept-Encoding < Link: <https://blog.przykladowy.pl/wp-json/>; rel="https://api.w.org/" < Link: <https://blog.przykladowy.pl/>; rel=shortlink < X-SRCache-Fetch-Status: HIT < X-SRCache-Store-Status: BYPASS < X-Frame-Options: SAMEORIGIN < X-Powered-By: EasyEngine v4.0.12 < Via: 1.1 google < CF-Cache-Status: DYNAMIC < Strict-Transport-Security: max-age=15552000; preload < X-Content-Type-Options: nosniff < Alt-Svc: h3-23=":443"; ma=86400 < Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" < Server: cloudflare < CF-RAY: 1a2b3c4d5e6f7g8h-LHR <
Pobieranie z ograniczeniem prędkości
Optymalizując działanie aplikacji, można przetestować prędkość pobierania z nałożonym limitem:
curl --limit-rate 2000B adres_url.com
Przykład:
curl --limit-rate 2000B https://przykladowa.strona.pl
Używanie serwera proxy do połączenia
Funkcja szczególnie przydatna w sieciach DMZ, gdzie połączenie z siecią zewnętrzną wymaga użycia serwera proxy.
curl --proxy adres_proxy:port https://adres_url.com
cURL umożliwia również dodanie nagłówka z danymi, co pozwala na testowanie i diagnozowanie problemów. Na przykład, aby zdefiniować nagłówek Content-Type:
curl --header 'Content-Type: application/json' http://adres_url.com
Powyższe polecenie informuje cURL o konieczności przesłania w nagłówku żądania informacji o Content-Type jako application/json.
Aby szybko sprawdzić nagłówek odpowiedzi, można wykorzystać:
curl --head http://adres_url.com
Przykład:
[[email protected] tmp]# curl --head https://strona.przykladowa.net HTTP/1.1 200 OK Data: Sob, 09 Lis 2019 19:51:23 GMT Content-Type: text/html Connection: keep-alive Set-Cookie: __cfduid=abc123def456ghi789jklm0123456; expires=Niedz, 08-Lis-20 19:51:23 GMT; path=/; domain=.strona.przykladowa.net; HttpOnly X-GUploader-UploadID: AEnB2Uo96JhvJmR2zYUL-Ndh2ta3UD_ykQAB5C7O8cjZQhCf-GxHQ0MsodSzRnl3guSN3ywAYNjtWcPXfwDXjLg3bQ-P5vQMOA Expires: Sob, 09 Lis 2019 20:51:23 GMT Cache-Control: public, max-age=3600 Last-Modified: Pon, 06 Sie 2018 10:45:47 GMT x-goog-generation: 1533552347482034 x-goog-metageneration: 1 x-goog-stored-content-encoding: identity x-goog-stored-content-length: 24620 x-goog-hash: crc32c=DpDPAQ== x-goog-hash: md5=cIP/3rusdUx12Zla1kf1yA== x-goog-storage-class: MULTI_REGIONAL Accept-Ranges: bytes CF-Cache-Status: DYNAMIC Expect-CT: max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct" Server: cloudflare CF-RAY: 1a2b3c4d5e6f7g8h-LHR [[email protected] tmp]#
Połączenie z adresem HTTPS/SSL z ignorowaniem błędów certyfikatu
Próba połączenia z adresem URL zabezpieczonym SSL/TLS, który posiada niepoprawny certyfikat lub niezgodność CN, skutkuje błędem:
curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
Polecenie cURL można zmusić do zignorowania błędu certyfikatu za pomocą flagi –insecure:
curl --insecure https://adres_url.com
Połączenie z użyciem określonego protokołu (SSL/TLS)
Funkcja przydatna do weryfikacji, czy dany adres URL może negocjować połączenie z konkretnym protokołem SSL/TLS.
Aby połączyć się z SSL v3:
curl --sslv3 https://adres_url.com
Dla różnych wersji TLS:
curl --tlsv1 https://przyklad.com curl --tlsv1.0 https://przyklad.com curl --tlsv1.1 https://przyklad.com curl --tlsv1.2 https://przyklad.com curl --tlsv1.3 https://przyklad.com
Pobieranie plików z serwera FTP
cURL umożliwia pobieranie plików z serwera FTP z wykorzystaniem nazwy użytkownika i hasła:
curl -u uzytkownik:haslo -O ftp://adres_ftp/plik.css
Dodanie opcji „-v” do dowolnej składni powoduje wyświetlenie szczegółowego wyjścia.
Nagłówek Host jest przydatny przy testowaniu adresu URL docelowego za pomocą adresu IP, gdy zawartość jest dostępna tylko przy zgodności nagłówka Host. Można go użyć także przy testowaniu aplikacji przez adres IP/URL modułu równoważenia obciążenia.
curl --header 'Host: docelowaaplikacja.com' https://192.168.0.1:8080/
Korzystanie z cURL online
Istnieje możliwość uruchomienia cURL zdalnie, korzystając z dedykowanych narzędzi.
Online CURL – lekkie narzędzie do pobierania adresów URL online, z możliwością dodania opcji takich jak:
--connect-timeout --cookie --data --header --head --location --max-time --proxy --request --user --url --user-agent
Kreator poleceń cURL – narzędzie umożliwiające konstruowanie poleceń cURL w wygodnym interfejsie użytkownika. Wprowadzając dane w odpowiednie pola, otrzymujesz na dole gotowe polecenie cURL.
cURL jest niezwykle pomocnym narzędziem w rozwiązywaniu problemów z łącznością. Mam nadzieję, że przedstawione informacje okażą się przydatne. Jeśli interesuje Cię pogłębienie wiedzy na ten temat, polecam kurs online Podstawy wiersza poleceń systemu Linux.
newsblog.pl