Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Pobieranie danych z zewnątrz z użyciem CURL'a
Forum PHP.pl > Forum > Przedszkole
kaszanka
Hi,

Można powiedzieć, iż zatrzymałem się w połowie, otóż:
Mam kod:
  1. <?php
  2. function curl_send_post( $COMMAND,$URL="https://domena/lacznik.php" )
  3. {
  4. $curl = curl_init();
  5. curl_setopt($curl,CURLOPT_URL,$URL);
  6. curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,0);
  7. curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
  8. curl_setopt($curl,CURLOPT_POST,1);
  9. curl_setopt($curl,CURLOPT_USERAGENT,"lacznik client");
  10. curl_setopt($curl,CURLOPT_HTTPHEADER,array("Content-Type: application/x-www-form-urlencoded;charset=ISO-8859-2",
  11. "Host: lacznik.pl","Content-length: ".strlen($COMMAND)));
  12. curl_setopt($curl,CURLOPT_POSTFIELDS,$COMMAND);
  13. curl_setopt($curl,CURLOPT_HEADER,1);
  14. $RESPONSE=curl_exec($curl);
  15. curl_close($curl);
  16. return preg_replace("/(r\n){2}/",'',strstr($RESPONSE,"r\nr\n"));
  17. }
  18. ?>

Komenda którą powinienem wysłać:
  1. <?php
  2. $komenda =
  3. "query[klient][pw]=haselko"
  4. ."&query[klient][uid]=user_id"
  5. ."&query[command]=witaj"
  6. ;
  7. $response = unserialize(curl_send_post($komenda));
  8. ?>


Jako odpowiedź powinienem otrzymać:
  1. <?php
  2. [resdata] => Array
  3. (
  4. [nr] => numer kolejny klienta
  5. [ver] => wersja łącznika
  6. [lang] => wersja języka
  7. [date] => aktualna data
  8. [access] => all
  9. [connection] => OK
  10. [ip:connect] => Adres IP lz którego się połączono
  11. )
  12. ?>


No i właśnie jak te dane wyciągnąć aby ukazać je na stronie?
Jakaś podpowiedź, przykład?

Próbowałem już wyciągać dane ze zmiennych w postaci np $resdata[0] ale to chyba nie ten trop oraz jak w ogóle sprawdzić czy komenda ta pobiera jakieś dane?
nowotny
Najpierw zobacz co w ogole dostajesz w odpowiedzi...
Po $RESPONSE=curl_exec($curl); dodaj
  1. <?php
  2. echo $RESPONSE;
  3. ?>

i wklej tu co ci wyświetliło...
kaszanka
Ok, otrzymuje zwrotkę:
  1. <?php
  2. HTTP/1.1 200 OK Date: Tue, 05 Feb 2008 10:31:40 GMT Server: Apache [...] Content-Type: text/html; charset=ISO-8859-2 a:2:{s:6:"status";i:[b]1000[/b];s:7:"resdata";a:8:{s:8:"nr";s:6:"355";s:7:"ver";s:3:"1.1.4";s:4:"lang";s:2:"pl";s:6:"date";s:19:"2008-02-05T10:31:40";s:6:"access";s:3:"all";s:10:"connection";s:2:"OK";s:10:"ip:connect";s:13:"192.168.1.2";}}
  3. ?>

1000 -> zapytanie poprawne
nowotny
Ok... no to teraz po linii $response = unserialize(curl_send_post($komenda)); wstaw
  1. <?php
  2. print_r($responce);
  3. ?>
i zobacz co ci wyświetla... w tablicy $responce powinieneś mieć wszystkie dane...
kaszanka
  1. <?php
  2. Array ( [status] => 1000 [resdata] => Array ( [nr] => 355 [ver] => 1.1.[lang] => pl [date] => 2008-02-05T15:10:02 [access] => all [connection] => OK [ip:connect] => 192.168.1.) )
  3. ?>

I gdy chcę wyciągnąć np [nr]
  1. <?php
  2. echo "$response[nr]";
  3. ?>
nic się nie dzieje ;/
nowotny
Cytat(kaszanka @ 5.02.2008, 15:16:17 ) *
  1. <?php
  2. Array ( [status] => 1000 [resdata] => Array ( [nr] => 355 [ver] => 1.1.[lang] => pl [date] => 2008-02-05T15:10:02 [access] => all [connection] => OK [ip:connect] => 192.168.1.) )
  3. ?>

I gdy chcę wyciągnąć np [nr]
  1. <?php
  2. echo "$response[nr]";
  3. ?>
nic się nie dzieje ;/

No nic dziwnego... nie umiesz się odwoływać do wartości w tablicach wielowymiarowych...
  1. <?php
  2. echo $responce['resdata']['nr'];
  3. ?>

albo zrób sobie najpierw:
  1. <?php
  2. $responce=$responce['resdata'];
  3. echo $responce['nr'];
  4. ?>
i wtedy będzie ci działać to co podałeś...

BTW, cudzysłowy tutaj są nie potrzebne:
  1. <?php
  2. echo "$response[nr]";
  3. ?>
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.