Jak wysyłać wiele zapytań za pomocą cURL?

Jeśli kiedykolwiek pracowałeś z API lub serwerami, pewnie znasz już cURL. To narzędzie to prawdziwy kombajn do wysyłania żądań HTTP i nie tylko. Ale co zrobić, gdy musisz wysłać setki, a nawet tysiące zapytań? W tym artykule pokażę Ci, jak wykorzystać cURL do masowego wysyłania zapytań – szybko, sprawnie i bez bólu głowy. Gotowy? Zaczynamy!

Czym jest cURL?

Zanim przejdziemy do konkretów, krótka definicja. cURL (Client URL) to darmowe narzędzie dostępne w większości systemów operacyjnych. Pozwala na wysyłanie zapytań HTTP (i innych protokołów, np. FTP) w terminalu lub w kodzie. Możesz go użyć do pobierania danych, wysyłania formularzy, testowania endpointów API, a nawet do skrobania stron.

Dlaczego warto wysyłać wiele zapytań?

Wyobraź sobie, że:

  • Musisz przetestować API, wysyłając setki żądań do różnych endpointów.
  • Chcesz pobrać dane z wielu źródeł jednocześnie.
  • Potrzebujesz wykonać masową aktualizację danych.

W takich sytuacjach ręczne wpisywanie komend cURL byłoby koszmarem. Na szczęście są sposoby, żeby to zautomatyzować.

Jak wysyłać wiele zapytań jednocześnie?

Oto kilka metod na zautomatyzowanie masowych zapytań z użyciem cURL. Każda z nich jest dostosowana do różnych potrzeb i poziomów zaawansowania.

1. Użycie skryptów bash

Najprostszym sposobem na wysyłanie wielu zapytań jest napisanie skryptu w bashu. Oto przykład:

Skrypt do wysyłania zapytań do wielu adresów URL

#!/bin/bash

# Plik z listą adresów URL
URL_FILE="urls.txt"

# Iteracja przez każdą linię w pliku
while IFS= read -r url; do
  echo "Wysyłam zapytanie do: $url"
  curl -X GET "$url" -o "output_$(basename $url).html"
done < "$URL_FILE"

Co robi ten skrypt?

  1. Pobiera listę adresów URL z pliku urls.txt.
  2. Wysyła zapytanie GET do każdego adresu.
  3. Zapisuje odpowiedzi w osobnych plikach (output_<nazwa_pliku>.html).

Jak uruchomić?

  1. Stwórz plik urls.txt i wklej adresy URL, jeden na linię.
  2. Zapisz powyższy kod w pliku send_requests.sh.
  3. W terminalu nadaj plikowi uprawnienia do uruchamiania:bashSkopiuj kodchmod +x send_requests.sh
  4. Uruchom skrypt:bashSkopiuj kod./send_requests.sh

2. Równoległe wysyłanie zapytań z GNU Parallel

Jeśli chcesz zaoszczędzić czas, możesz wysyłać zapytania równolegle. W tym celu świetnie sprawdzi się narzędzie GNU Parallel.

Skrypt z użyciem GNU Parallel

#!/bin/bash

# Plik z listą adresów URL
URL_FILE="urls.txt"

# Komenda równoległego wysyłania zapytań
cat "$URL_FILE" | parallel -j 10 curl -X GET {} -o "output_{/}.html"

Co tu się dzieje?

  • parallel -j 10 – Wysyła maksymalnie 10 zapytań jednocześnie.
  • {} – Reprezentuje adres URL z pliku.
  • {/} – Wyciąga tylko nazwę pliku z URL-a (przydatne do zapisu odpowiedzi).

3. Wielowątkowość w Pythonie

Jeśli bash to dla Ciebie za mało, możesz użyć Pythona. Oto przykład z wykorzystaniem modułu requests i concurrent.futures.

Kod w Pythonie

import requests
from concurrent.futures import ThreadPoolExecutor

# Lista URLi do zapytań
urls = [
    "https://example.com",
    "https://jsonplaceholder.typicode.com/posts",
    "https://jsonplaceholder.typicode.com/comments"
]

# Funkcja wysyłająca zapytanie
def fetch_url(url):
    try:
        print(f"Wysyłam zapytanie do: {url}")
        response = requests.get(url)
        filename = f"output_{url.split('//')[1].replace('/', '_')}.html"
        with open(filename, 'w') as f:
            f.write(response.text)
        print(f"Zapisano odpowiedź w: {filename}")
    except Exception as e:
        print(f"Błąd przy zapytaniu do {url}: {e}")

# Równoległe wysyłanie zapytań
with ThreadPoolExecutor(max_workers=5) as executor:
    executor.map(fetch_url, urls)

Jak uruchomić?

  1. Zainstaluj moduł requests (jeśli jeszcze go nie masz):bashSkopiuj kodpip install requests
  2. Zapisz powyższy kod w pliku send_requests.py.
  3. Uruchom skrypt:bashSkopiuj kodpython send_requests.py

4. cURL w trybie batch z pliku

cURL ma wbudowaną opcję do obsługi plików batchowych.

Przykład pliku batchowego

Stwórz plik commands.txt z zawartością:

curl -X GET "https://example.com" -o "output_example.html"
curl -X GET "https://jsonplaceholder.typicode.com/posts" -o "output_posts.json"
curl -X GET "https://jsonplaceholder.typicode.com/comments" -o "output_comments.json"

Następnie uruchom:

bash commands.txt

To proste rozwiązanie dla mniej skomplikowanych scenariuszy.

Jak radzić sobie z zakłopotaniem (error handling)?

Nie wszystko pójdzie gładko, zwłaszcza przy masowych zapytaniach. Oto kilka wskazówek:

  1. Sprawdzaj status kodu odpowiedzi.
    Dodaj flagę -w '%{http_code}' w cURL, żeby zobaczyć kod odpowiedzi.
  2. Loguj błędy.
    W bashu możesz przekierować błędy do pliku:bashSkopiuj kodcurl -X GET "https://example.com" 2>> errors.log
  3. Używaj retry.
    W cURL możesz ustawić automatyczne ponawianie zapytań:bashSkopiuj kodcurl --retry 5 --retry-delay 2 -X GET "https://example.com"

Jak uniknąć wybuchowości (limitów API)?

Jeśli Twoje zapytania są blokowane, bo przekraczasz limity API, zastosuj:

  1. Ograniczenie liczby zapytań na sekundę.
    W bashu możesz dodać opóźnienie:bashSkopiuj kodsleep 1
  2. Uwierzytelnianie.
    Większość API wymaga klucza dostępowego. Dodaj go w nagłówkach:bashSkopiuj kodcurl -H "Authorization: Bearer YOUR_TOKEN" "https://api.example.com"
  3. Równoważenie obciążenia.
    Rozdziel zapytania na różne godziny lub serwery.

Jak widzisz, cURL to niesamowite narzędzie, które świetnie nadaje się do wysyłania wielu zapytań. Niezależnie od tego, czy wybierzesz prosty skrypt bash, GNU Parallel, czy Pythona, ważne jest, żeby dobrać odpowiednią metodę do swojego przypadku. I pamiętaj – zawsze testuj swoje rozwiązania na małej próbce, zanim odpalisz masówkę!

Szukasz taniego i dobrego hostingu dla swojej strony www? - Sprawdź Seohost.pl