🢂cURL ‑ uniwersalny klient w PHP

Ten kod można wykorzystać do wysyłania żądań do dowolnego adresu URL.

W skrócie, kod działa w następujący sposób:

  • Sprawdza czy podany parametr funkcji to prawidłowy adres URL i jeśli tak to:
  • Inicjalizuje sesję cURL.
  • Ustawia opcje cURL określające, że odpowiedź powinna zostać zwrócona jako ciąg znaków i że nagłówki HTTP powinny zostać pobrane.
  • Ustawia adres URL docelowy dla żądania HTTP.
  • Ustawia funkcję zwrotną nagłówków, która przetwarza każdą linię nagłówka i wyodrębnia nazwę i wartość nagłówka.
  • Wykonuje żądanie HTTP.
  • Pobiera rozmiar nagłówków HTTP.
  • Wyodrębnia kod stanu HTTP z odpowiedzi.
  • Wyodrębnia nagłówki HTTP z odpowiedzi.
  • Wyodrębnia ciało odpowiedzi, usuwając nagłówki.
  • Zwraca tablicę zawierającą wyodrębnione dane odpowiedzi.

Po co?

Ten kod można wykorzystać do wysyłania żądań HTTP do dowolnego adresu URL. Może być używany do pobierania stron internetowych, uzyskiwania dostępu do API i wykonywania innych zadań wymagających żądań HTTP.

<?php
/**
 * Funkcja `client` jest funkcją PHP, która wysyła żądanie HTTP do określonego adresu URL i zwraca odpowiedź.
 *
 * @param url Parametr `url` to adres URL strony internetowej lub punktu końcowego API, do którego chcesz wysłać żądanie.
 * żądanie. Jest to parametr opcjonalny, więc jeśli nie podasz wartości, zostanie ona domyślnie ustawiona na `null`.
 *
 * @return tablica z trzema elementami: 'status', 'header' i 'body'.
 * Element "status" zawiera kod statusu HTTP odpowiedzi. 
 * Element 'header' zawiera tablicę asocjacyjną nagłówków odpowiedzi, gdzie kluczami są nazwy nagłówków.
 * Element "body" zawiera treść odpowiedzi.
 */
function client($url = null)
{
    if (filter_var($url, FILTER_VALIDATE_URL) === false) {
        return false;
    }
    $odpowiedz = [];
    $headers = [];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt(
        $ch,
        CURLOPT_HEADERFUNCTION,
        function ($curl, $header) use (&$headers) {
            $len = strlen($header);
            $header = explode(':', $header, 2);
            if (count($header) < 2) { // Ignoru błędne
                return $len;
            }
            $headers[strtolower(trim($header[0]))][] = trim($header[1]);
            return $len;
        }
    );
    $response = curl_exec($ch);

    $header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
    $odpowiedz['ststus'] = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $odpowiedz['header'] = $headers;
    $odpowiedz['body'] = substr($response, $header_size);
    return $odpowiedz;
}