Podstawy CURL’a w PHP
Najnowszy artykuł kieruję dla tych osób, którzy znają już co nieco język PHP, jednak nie mieli wcześniej styczności z CURL’em. Znam osobiście osoby, które nadal do pobierania stron używają takich funkcji jak: fsockopen(), bądź file_get_contents(), choć wiedzą o istnieniu o wiele wydajniejszego CURL’a.
Nie wiem czemu, ale zazwyczaj przerażeni są faktem, iż do prawidłowego wywołania trzeba wpisać kilka linii kodu więcej niż w wymienionych wcześniej funkcjach.
A więc zacznijmy od tego, do czego może nam się przydać CURL:
- pobieranie treści stron internetowych – parsowanie, itp…
- obsługi zewnętrznych skryptów, wysyłając im dane, np.: za pomocą POST’a
- wielu innych rzeczy – zależy tylko od pomysłu programisty
Przejdźmy zatem do obsługi CURL w PHP.
Zaczynamy od wywołania CURL’a – robimy to za pomocą funkcji curl_init() przypisując ją do zmiennej, którą będzie wskaźnikiem na naszego CURL’a, z którego będziemy korzystać:
$curl = curl_init();
Aby zamknąć sesje CURL używamy polecenia curl_close(). Czynimy to zazwyczaj w końcowej fazie. Jako atrybut wstawiamy uchwyt do naszej zmiennej CURL. A więc wyglądać to powinno tak:
curl_close($curl);
A więc potrafimy już otwierać i zamykać połączenie, jednak na razie nam to nic nie daje. Pobierzmy zatem sobie stronę – przykładowo będzie to google.pl
Aby to zrobić należy ustawić odpowiednią opcję CURL’a. Do ustawiania opcji używamy polecenia curl_setopt(UCHWYT, ATRYBUT_1, ATRYBUT_2) – gdzie UCHWYT, to oczywiście uchwyt do naszej zmiennej CURL’a, ATRYBUT_1 to nazwa ustawianej opcji, ATRYBUT_2 to wartość dla danej opcji. Przykładowo wygląda to tak:
curl_setopt($curl, CURLOPT_URL, "http://www.google.pl/");
W powyższym przykładzie opcją CURLOPT_URL ustawiamy adres z jakim chcemy się połączyć. Tej opcji używamy chyba najczęściej
Na razie o ustawieniach CURL’a to tyle. Zanim opiszę inne ważne opcje, jeszcze jedna bardzo ważna funkcja, którą stosujemy przy sesji CURL – curl_exec() – służy ona to wywołania sesji CURL.
curl_exec($curl);
Co mamy do tej pory:
1 2 3 4 | $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.google.pl/"); curl_exec($curl); curl_close($curl); |
Dzięki tym 4 linijkom kodu pobieramy stronę google.pl i jej zawartość wyświetlana jest automatycznie w naszej przeglądarce. Nie o to jednak najczęściej nam chodzi. W 80% przypadków chcemy daną stronę pobrać i przypisać do nowej zmiennej string i później ją obrabiać. Aby zwracaną zawartość strony przypisać do string’a należy użyć opcji CURLOPT_RETURNTRANSFER (ustawiająć ją na true) a następnie wynik zwracany przez curl_exec() przypisać do nowej zmiennej. Wyglądać więc to powinno tak
1 2 3 4 5 | $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, "http://www.google.pl/"); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); $strona = curl_exec($curl); curl_close($curl); |
Od tej pory w zmiennej $strona mamy zawartość strony pobieranej przez CURL. Możemy także zawartość strony przypisać do pliku (opcja CURLOPT_FILE).
Inne przydatne i często wykorzystywane opcje:
- CURLOPT_REFERER – referer strony z jakiej wchodzimy, źródło naszego wejścia – może być inna strona, możemy ustawić także pusty ciąg
- CURLOPT_FOLLOWLOCATION – jeżeli jest jakieś przekeirowanie na docelowej stronie to podążamy razem z nim (przydatne przy 301, 302)
- CURLOPT_USERAGENT – dane user agent – możemy być kim tylko chcemy
- CURLOPT_TIMEOUT – czas oczekiwania na odpowiedź z „parsowanej” strony. Warto ustawić na ok. 10 sekund – strona z którą się łączymy nie zawsze musi działać szybko i stabilnie
- CURLOPT_HEADER – opcja pozwala ustalić czy w zwracanym stringu mają być wyświetlone także nagłówki, zazwyczaj ustaiwamy na 0
Za pomocą CURL’a możemy oczywiście wysyłąć dane GET i POST. GET nie ma co komentować – dodajemy po prostu do adresu strony odpowiednie atrybuty w opcji CURLOPT_URL:
curl_setopt($curl, CURLOPT_URL, "http://www.google.pl/search?hl=pl&q=pozycjonowanie");
Aby wysłać dane za pomocą posta potrzeba 2 linijki kodu więcej – ustawić 2 dodatkowe opcje:
1 2 | curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, "zmienna=wartość&zmienna_inna=wartość inna"); |
Czyli co? W pierwszej linii ustawiamy opcję, że będziemy korzystać z metody POST. Linia druga – podajemy dane do POST’a.
No to chyba z podstaw wiemy już wszystko. Zbudujmy więc prostą funkcję:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function connect_curl($url, $post='') { $curl=curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_REFERER, "http://www.google.pl/search?hl=pl&q=pozycjonowanie"); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($curl, CURLOPT_USERAGENT, 'Googlebot/2.1 (+http://www.googlebot.com/bot.html)'); curl_setopt($curl, CURLOPT_TIMEOUT, 30); curl_setopt($curl, CURLOPT_HEADER, 0); if(strlen($post)>0) { curl_setopt($curl, CURLOPT_POST, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $post); } $strona=curl_exec($curl); curl_close($curl); } |
To tak na koniec szybkie wytłumaczenie co robi funkcja connect_curl()
Linia 3 (zaczynająca się od $curl = …) – otwarcie sesji CURL
Linia 4 – ustawiamy adres URL z jakim będziemy się łączyć
Linia 5 – referer zwracany na stronie z którą się łączymy
Linia 6 – przechodzimy przez przekierowania, jeśli takie są
Linia 7 – nasz user agent – możemy być nawet Googlebot’em ![]()
Linia 8 – max czas połączenia – 30 sekund
Linia 9 – nie chcemy zwracać nagłówka
Linia 10-14 – jeżeli drugi atrybut funkcji był wypełniony to ustawiamy POST
Linia 15 – wywołujemy CURL’a
Linia 16 – zamknięcie sesji CURL










Super mini poradniczek
. Dzięki!
Dzięki kolego, tego własnie potrzebowałem :]
Przyłączam się do poprzedników, czasami jedno mądre zdanie potrafi rozjaśnić mrok wiedzy i zrozumienia.
Cyt.: “W 80% przypadków chcemy daną stronę pobrać i przypisać do nowej zmiennej string i później ją obrabiać.”
Dzięki młody!!
Teraz mogę już spokojnie rozsyłać mój phishing
A na serio: dzięki za poradnik, przydał się.
Genialne – w końcu zrozumiałem – wielkie dzięki
Chłopie, jesteś Wielki.
Kilka zdań i wszystko staje się proste. Dzięki.