Jak z poziomu PHP „odpalić” dany adres URL?

PHP - Tips & Tricks Zostaw komentarz

Czasami istnieje potrzeba wywołania z poziomu skryptu jakiegoś adresu URL, tak jakby użytkownik wpisał go w przeglądarkę internetową. Przykładem może być integracja formularza rejestracyjnego, z oprogramowaniem do wysyłania mailingów (e-mail każdego, użytkownika który zakłada w serwisie konto od razu z automatu jest dodawany przykładowy adres URL do wywołania to http://www.domena.pl/xxx/add.php?email=). Pozostaje pytanie, jak to zrobić?

Najprościej jest spróbować „otworzyć” dany adres URL, tak jakbyśmy otwierali plik. Ot wpisujemy w kodzie funkcję fopen(‚http://xxxx….”, „r”); ale nie zawsze to zadziała (czasami serwery ze względów bezpieczeństwa są tak skonfigurowane, że funkcja fopen otwiera tylko pliki lokalne). Tutaj z pomocą przychodzi biblioteka cURL.Jest to biblioteka o olbrzymich możliwościach. Pozwala ona zasymulować przeglądarkę internetową (łącznie z procesem logowania, czyli mogę się np. zalogować w jakimś serwisie i dopiero potem pobrać zawartość strony). Nas na szczęście w tej chwili interesuje tylko wywołanie danego adresu URL, więc kod nie będzie zbytnio skomplikowany:

$url='http://www.domena.pl/xxx/add.php?email='.$email;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);

Zmienna $url zawiera adresu URL, który mamy wywołać. Po odpaleniu cURL’a w zmiennej $data będzie źródło pobranej strony (można owe źródło np. wyświetlić za pomocą instrukcji echo albo np. sprawdzić czy w owej zmiennej występuje jakiś ciąg znaków (np. ‚Dziękuję, za zapisanie się do subskrypcji’).

Nieznacznie sytuacja się komplikuje, gdy dany adres URL chcemy wywołać, ale za pomocą metody POST (tak, jakby ktoś zapisał się do subskrypcji z formularza na stronie, którego dane są wysyłane metodą POST, bo zapis metodą GET nie działa). Wtedy kod będzie nieznacznie bardziej skomplikowany (musimy poinformować bibliotekę cURL, że parametry wysyłamy metodą POST).

$url='http://www.domena.pl/xxx/add.php';
$parameters = array(
'email' => $email,
'name' => $name
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);

Jak widać obsługa biblioteki cURL jest dość prosta, a daje naprawdę dość spore możliwości!

Tagi: ,

Zanim dodasz komentarz, zapoznaj się z kilkoma podstawowymi zasadami:

  1. Jeśli zamiast imienia (lub pseudonimu) wpiszesz jakiś mało logiczny ciąg znaków np. asdfg, to taki komentarz zostanie usunięty.
  2. Jeśli się za kogoś podszywasz, to taki komentarz zostanie usunęty
  3. Jeśli zamiast imienia (pseudonimu) wpiszesz jakieś słowo kluczowe (np. tani hosting), to taki komentarz zostanie usunięty
  4. Jeśli Twoim jedynym celem jest zareklamowanie się, to taki komentarz zostanie niezwłocznie usunięty
  5. Komentarze nie związane z tematem notki są kasowane.
  6. Komentarze, które zawierają wulgarne słowa, bądź są obraźliwe (nie dotyczy konstruktywnej krytyki) są kasowane.
  7. Komentarze z mailem typu "nie.podam@coś.tam.pl" są kasowane
  8. Komentarze pisane niechlujnie (bez interpunkcji, w błędami ortograficznymi, z licznymi literówkami, pisane WIELKIMI LITERAMI) są kasowane

3 komentarze do “Jak z poziomu PHP „odpalić” dany adres URL?”

  1. Jak napisać aplikację, która wysyła SMSy? | Pomocnik webmastera Says:

    […] Integracja usługi z skryptem odbywa się za pośrednictwem prostego API. Ogranicza się to w sumie to wywołania specjalnego adresu URL (w stylu http://www.xxx/sms.php?login=login&haslo=haslo&numer=numer&tresc=xxxx). O tym, jak z poziomu skryptu PHP wywołać dany adres URL pisałem w notce Jak z poziomu PHP “odpalić” dany adres URL? […]

  2. Luki Says:

    Curl jest bardzo ciekawym rozwiązaniem i może być w dzisiejszych czasach bardzo praktyczna. Z moich obserwacji wynika, ze łatwo jest zrealizować proste wywołania z jej pomocą. Niestety bardzo skomplikowane jest wykorzystanie w skomplikowanych przypadkach, np logowanie do banku (oczywiście z użyciem legalnego konta w celu automatyzacji rożnych procesów).
    Czy ktoś z doświadczeniem spotkał sie z przypadkami, ze nie w każdej sytuacji daje sie skutecznie wykonać curlem to co normalnie możnaby zrobić klikając w przeglądarkę ?
    Pracuje nad takim projektem i chętnie pogawedzilbym szczegółowo z kimś konkretnym w temacie ?

  3. Damian Daszkiewicz Says:

    @Luki – w bibliotece cURL nie jestem jakiś mega obeznany, ale kiedyś napisałem prosty skrypt, który się logował w pewnym serwisie (nie https, tylko zwykłe http), przechodził na podstronę i pobierał dane. Wiem, że musiałem jakoś uaktywnić ciasteczka, aby logowanie działało.

    Nie jestem na tyle obeznany w cURLu, aby jakoś Tobie pomóc, ale zawsze możesz zadać pytanie na jakimś forum programistycznym

Zostaw komentarz

WordPress - Hosting: Twój hosting - Skórka: N.Design Studio - Spolszczenie: Adam Klimowski.
RSS wpisów RSS komentarzy Zaloguj się