[PHP|cURL] Kurs cURL
cURL - Client URL Library - to biblioteka do uniwersalnej wymiany danych między zdalnymi serwerami poprzez różne protokoły. Oznacza to, że na danym serwerze można wysyłać i pobierać dane z/do innego. Biblioteka cURL jest prosta w użyciu, ale zarazem bardzo funkcjonalna. Używa się jej między innymi do pobierania zdalnych dokumentów czy też wysłania danych do innych serwisów. cURL obsługuje protokoły HTTP, HTTPS, FTP oraz inne. Zaletami biblioteki curl są łatwość użycia oraz wysoka konfigurowalność. Wpis ten jest wprowadzeniem do obsługi tej biblioteki.
Pierwsze żądanie
W tym przykładzie pokażę jak może wyglądać żądanie http z użyciem cURL:
$ch = curl_init('http://www.example.com');
// Inicjujemy sesję cURL z żądaniami na adres przekazany jako argumentcurl_setopt($ch, CURLOPT_HEADER, 0);
// Rezygnujemy z nagłówków w zwróconej odpowiedzicurl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);
// Ustawiamy timeout połączenia np. 30 sekundcurl_exec($ch);
// Wykonujemy żądaniecurl_close($ch);
// Kończymy sesję
Jak widać na powyższym przykładzie, wysłanie prostego żądania http wymaga napisania tylko 5 krótkich linii kodu.
curl_init
Funkcja curl_init to funkcja inicjalizująca sesję cURL. Jako argument możemy, ale nie musimy przekazać do funkcji URL na jaki będzie wysłane żądanie. Adres dla żądania można także przekazać za pomocą funkcji curl_setopt, ale o tym w dalszej części. Funkcja curl_init zwraca resource - uchwyt połączenia.
curl_setopt
Funkcja curl_setopt jest jedną z ważniejszych funkcji biblioteki cURL. Służy ona do ustawiania opcji połączenia. Funkcja ta przyjmuje 3 argumenty: (resource) $ch - uchwyt połączenia, (int) $option - opcja do ustawienia (przekazywana jako stała), (mixed) $value - wartość dla ustawiane opcji. Wypiszę najczęściej używane przeze mnie opcje wraz z ich opisami. Wszystkie dostępne opcje znajdują się w dokumentacji.
- bool CURLOPT_RETURNTRANSFER - TRUE, jeśli wynik żądania ma być zwrócony;
- bool CURLOPT_HEADER - TRUE, jeśli do odpowiedzi mają zostać dołączone nagłówki;
- bool CURLOPT_BINARYTRANSFER - TRUE, jeśli odpowiedź ma być zwrócona w surowym stanie;
- bool CURLOPT_AUTOREFERER, TRUE, jeśli nagłówek Referer ma być ustawiany automatycznie;
- string CURLOPT_URL - URL dla zapytania;
- string CURLOPT_REFERER - ustawia nagłówek Referer;
- string CURLOPT_USERAGENT - ustawia nagłówek User-Agent;
- string CURLOPT_COOKIE - ustawia nagłówek Cookie;
- string CURLOPT_ENCODING - ustawia nagłówek Accept-Encoding;
- int CURLOPT_CONNECTTIMEOUT - ustawia timeout połączenia (w sekundach);
- int CURLOPT_BUFFERSIZE - ustawia rozmiar bufora;
- int CURLOPT_PORT - ustawia numer portu dla połączenia;
curl_exec
Za pomocą funkcji curl_exec wykonujemy wcześniej ustawione żądanie. Funkcja przyjmuje 1 argument (resource) - uchwyt zwrócony przez funkcję curl_init. Funkcja ta zwraca TRUE, jeśli żądanie zostanie pomyślnie wysłane lub FALSE w przypadku niepowodzenia. Uwaga! Funkcja curl_init służy także do zwracania wyniku żądania, jeśli opcja CURLOPT_RETURNTRANSFER zostanie ustawiona na TRUE.
curl_close
Funkcja curl_close kończy sesję cURL. Funkcja przyjmuje 1 argument (resource) - uchwyt połączenia.
cURL wysyłanie pliku na serwer przy użyciu FTPS
Poniższy przykład pokazuje jak wysłać plik na serwer przez protokół FTPS:
<?php
// Ustawienia
$ftp_server = 'ftp.example.com'; // Host serwera FTP
$ftp_username = 'username'; // Twoja nazwa użytkownika
$ftp_password = 'password' ; // Twoje hasło
$local_file = 'path/to/file.jpg'; // Ścieżka do pliku JPG, który ma zostać wysłany
$remote_file = "file.jpg"; // Docelowa nazwa pliku na serwerze FTP
$ftps_url = 'ftps://' . $ftp_server . '/' . $remote_file; // URL docelowy
// Inicjalizacja sesji
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ftps_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Zwróć odpowiedź jako string
curl_setopt($ch, CURLOPT_UPLOAD, true); // Ustal tryb uploadu
curl_setopt($ch, CURLOPT_USER, $ftp_username);
curl_setopt($ch, CURLOPT_PASS, $ftp_password);
curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_FTP | CURLPROTO_FTPCOM); // Ustawiamy protokoły
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Wyłączamy weryfikację certyfikatu (opcja do nawigacji, może być niebezpieczna)
curl_setopt($ch, CURLOPT_INFILE, fopen($local_file, 'r')); // Otwieramy plik do odczytu
curl_setopt($ch, CURLOPT_INFILESIZE, filesize($local_file)); // Rozmiar pliku do wysłania
// Wykonujemy transfer
if (curl_exec($ch) === false) {
echo 'cURL Error: ' . curl_error($ch);
}
else {
echo 'Plik został pomyślnie przesłany.';
}
// Zamkamy sesję i plik
curl_close($ch);
fclose($local_file);
Komentarze
Prześlij komentarz
Dzięki za komentarz!