Podstawy CURL’a w PHP

sobota, Luty 2nd, 2008 Komentarze: 3
Kategoria: Programowanie | Tagi: , ,

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

  • Print
  • RSS
  • Digg
  • Facebook
  • Twitter
  • del.icio.us
  • Google Bookmarks
  • Gwar
  • Wykop

Podobne wpisy:


Komentarzy: 3 do wpisu “Podstawy CURL’a w PHP”

  1. Dingo mówi:

    Super mini poradniczek :-) . Dzięki!

  2. Maciej mówi:

    Dzięki kolego, tego własnie potrzebowałem :]

  3. tuz mówi:

    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!!

Zostaw Komentarz

Wszelkie prawa zastrzeżone. Materiał zawarty na tej stronie jest ograniczony prawami autorskimi oraz innymi prawami i nie może być kopiowany, publikowany i rozprowadzany w żadnej formie.