Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: CURL
Forum PHP.pl > Forum > PHP
1oBuZ
Witam!

Drodzy użytkownic mam problem przy wykonaniu poniższego schematu za pomocą curl.
Jeśli to możliwe proszę o wsparcie/radę.

  1. SCHEMAT
  2.  
  3. polączenie
  4. \\
  5. wykonaj polecenie
  6. \\
  7. pobierz odpowiedz
  8. \\
  9. wykonaj polecenie
  10. \\
  11. pobierz odpowiedz
  12. //
  13. rozłącz
  14.  
  15. polecenie - komenda w postaci XML
  16. odpowiedz - odpowiedz w postaci XML


Moje dotychczasowe wypociny, niestety bez efektów (uproszczony przykład).

  1. $a=0;
  2. $curl = curl_init();
  3. curl_setopt($curl, CURLOPT_URL, $serwer);
  4. curl_setopt($curl, CURLOPT_HEADER, 0);
  5. curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
  6. curl_setopt($curl, CURLOPT_POST, 1);
  7.  
  8. while ($a<2) {
  9.  
  10. if ($a==0) {
  11. curl_setopt($curl, CURLOPT_POSTFIELDS, $xml1);
  12. $wynik=curl_exec ($curl);
  13. }
  14. else
  15. {
  16. curl_setopt($curl, CURLOPT_POSTFIELDS, $xml2);
  17. $wynik.=curl_exec ($curl);
  18. }
  19. $a++;
  20. }
  21. curl_close($curl);
  22.  
  23. echo $wynik;



Z góry dziękuję.
Quadina
Co rozumiesz przez "brak efektów" questionmark.gif

Po pierwsze zrobił bym sobie funkcje typu:
  1.  
  2. function getURL($serwer, $tablica=array()){
  3. $curl = curl_init();
  4. curl_setopt($curl, CURLOPT_URL, $serwer);
  5. curl_setopt($curl, CURLOPT_HEADER, 0);
  6. curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
  7. if(count($tablica)){
  8. curl_setopt($curl, CURLOPT_POST, 1);
  9. curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($tablica) );
  10. }
  11. return curl_exec ($curl);
  12. }

I dopiero zaczął główkować nad mechaniką systemu.
1oBuZ
Cytat(Quadina @ 4.12.2010, 23:49:34 ) *
Co rozumiesz przez "brak efektów" questionmark.gif

Po pierwsze zrobił bym sobie funkcje typu:
  1.  
  2. function getURL($serwer, $tablica=array()){
  3. $curl = curl_init();
  4. curl_setopt($curl, CURLOPT_URL, $serwer);
  5. curl_setopt($curl, CURLOPT_HEADER, 0);
  6. curl_setopt($curl, CURLOPT_RETURNTRANSFER,1);
  7. if(count($tablica)){
  8. curl_setopt($curl, CURLOPT_POST, 1);
  9. curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($tablica) );
  10. }
  11. return curl_exec ($curl);
  12. }

I dopiero zaczął główkować nad mechaniką systemu.



Dziękuję za odpowiedź, spójrz jednak proszę na schemat i powiedz mi jak się on ma do napisanej przez Ciebie funkcji smile.gif
Każda komenda musi być wykonywana z osobna po czym pobierana powinna być odpowiedź serwera do każdego z poleceń.

Bynajmniej doceniam chęć pomocy i liczę na dalsze sugestie.
Quadina
Nie można wykonywać kilku requestów do serwera HTTP na jednym połączeniu. Serwery typu apache działają na zasadzie odebrania nagłówków i ewentualnie jakiejś zawartości - generują odpowiedź i wysyłają nagłówki i odpowiedź; następuje zamknięcie połączenia. W cURL nie da się wykonać na jednym połączeniu kilku zapytań właśnie w związku z budową protokołu http. Podana przeze mnie funkcja wykonuje Twój request i zwraca Ci jego wynik. Jeżeli chcesz do tego samego serwera zadać kilka różnych pytań symulując przeglądarkę, musisz wykonać kilka różnych połączeń do niego. Odpowiedzią zatem na Twoje pytanie jest: masz błędny schemat niemożliwy do skonstruowania dla protokołu HTTP.
1oBuZ
Cytat(Quadina @ 5.12.2010, 00:05:36 ) *
Nie można wykonywać kilku requestów do serwera HTTP na jednym połączeniu. Serwery typu apache działają na zasadzie odebrania nagłówków i ewentualnie jakiejś zawartości - generują odpowiedź i wysyłają nagłówki i odpowiedź; następuje zamknięcie połączenia. W cURL nie da się wykonać na jednym połączeniu kilku zapytań właśnie w związku z budową protokołu http. Podana przeze mnie funkcja wykonuje Twój request i zwraca Ci jego wynik. Jeżeli chcesz do tego samego serwera zadać kilka różnych pytań symulując przeglądarkę, musisz wykonać kilka różnych połączeń do niego. Odpowiedzią zatem na Twoje pytanie jest: masz błędny schemat niemożliwy do skonstruowania dla protokołu HTTP.


Hmm to może warto pomyśleć o sesjach.
Jest taka możliwość aby po wykonaniu curl zapisać sesję i kolejne polecenia otwierać w tej sesji?
(jeśli tak proszę o jakiś przykład dla zrozumienia- w google nic sensownego nie odnalazłem)
Quadina
Sesja to nic innego jak cookie. Otrzymujesz go w nagłówkach, i musisz wysłać go do następnego zapytania. Tak jak robią to przeglądarki. Google w pierwszej pozycji na "curl cookie" jest http://coderscult.com/php/php-curl/2008/05...ookies-example/. Zapraszam do lektury. W razie pytań dawaj do tego tematu, tylko pisz dokładnie z czym masz problem i jakie masz błędy.

EDITED:
http://www.php.net/manual/en/book.curl.php#86391 <- tutaj masz całą klasę już gotową do obsługi
1oBuZ
Dziękuję uprzejmie za pomoc +/- o coś takiego mi chodziło.
Plusik dla Ciebie smile.gif
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.