10 cURL Użycie poleceń z przykładem w czasie rzeczywistym

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