Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: curl_init a kilkukrotne odwołania pod różne adresy
Forum PHP.pl > Forum > PHP
jajcarzd1
Witam

Potrzebuję zastosować curl-a do odwiedzenia pewnego serwisu i pobrania z niego danych o produktach. Z tym że najpierw muszę się do niego zalogować no a potem pobrać dane o kategoriach i znajdujących się w nich produktach, więc będzie trochę odwołań pod różne adresy. No i teraz związane z tym pytanie.

Czy przy odwoływaniu się po różne adresy muszę za kazdym razem wywoływać curl_init oraz potem zamykać to połaczenie
  1. $c = curl_init('adres');
  2. ....
  3. curl_close($c);


czy też mogę zmieniać poprostu URL, potem wywołac curl_exec i tak w koło np.

  1. private function curlExec($url,$login = false,$close = false) {
  2.  
  3. $cookie_file = dirname(__FILE__).'/cookie_import.txt';
  4.  
  5. if($login === true) {
  6.  
  7. $postFields['userLogin'] = 'login';
  8. $postFields['userPassword'] = 'haslo';
  9. $this->handler = curl_init();
  10. curl_setopt($this->handler, CURLOPT_POSTFIELDS, $postFields);
  11.  
  12. }
  13.  
  14. curl_setopt($this->handler, CURLOPT_URL, $url);
  15. curl_setopt($this->handler, CURLOPT_COOKIEJAR, $cookie_file);
  16. curl_setopt($this->handler, CURLOPT_COOKIEFILE, $cookie_file);
  17. curl_setopt($this->handler, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12");
  18. curl_setopt($this->handler, CURLOPT_RETURNTRANSFER, 1);
  19.  
  20. $data = curl_exec($this->handler);
  21. if($close === true) curl_close($this->handler);
  22.  
  23. return $data;
  24.  
  25. }
  26.  
  27.  
  28. $this->curlExec('http://adres/login',true);
  29. $this->curlExec('http://adres/kategorie');
  30. $this->curlExec('http://adres/produkt1');
  31. $this->curlExec('http://adres/produkt2');
  32. //....
  33. $this->curlExec('http://adres/produktN',false,true);
  34.  

Fifi209
Owszem możesz zmieniać url, nie musisz zamykać uchwytu. Jednak pamiętaj, aby Twój sposób działał napisz sobie w klasie funkcję, która stworzy ów handler ew. zrób to w konstruktorze.
jajcarzd1
Ok dzięki.

Powiedzcie mi jeszcze czy normalnym jest że za pierwszym razem odpalam skrypt i wykorzystuję uwierzytelnianie HTTP

  1. curl_setopt($this->handler, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  2. curl_setopt($this->handler, CURLOPT_USERPWD, 'ilogin:haslo');
  3. curl_setopt($this->handler, CURLOPT_COOKIEJAR, $cookie_file);
  4. curl_setopt($this->handler, CURLOPT_COOKIEFILE, $cookie_file);


więc sądziem że gdy ponownie odpalę skrypt to jako że jest utworzony cookies to nie będe musiał podawać ponownie

  1. curl_setopt($this->handler, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
  2. curl_setopt($this->handler, CURLOPT_USERPWD, 'ilogin:haslo');


danych uwierzytelniających. Czy przy uwierzytelnianiu HTTP za każdym razem muszę podawać te dane ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.