Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Początki zabaw z curlem :)
kaszanka
post
Post #1





Grupa: Zarejestrowani
Postów: 138
Pomógł: 1
Dołączył: 17.02.2007

Ostrzeżenie: (0%)
-----


Hi,

Stawiam pierwsze kroki z curlem i już mam dylamaty, otóż, prosty skrypt który mi działa:

  1. <?php
  2. $post_fields = 'query[as]=a1&query[aa]=aaa1';
  3.           $ch = curl_init();
  4.           curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); //follow any redirects
  5.           curl_setopt($ch, CURLOPT_VERBOSE, 1);
  6.           curl_setopt($ch, CURLOPT_URL, "http://localhost/command.php");
  7.           curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //print response page
  8.           curl_setopt($ch, CURLOPT_POST, 1);
  9.           curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
  10.          $res = curl_exec($ch);
  11.          curl_close($ch);
  12. echo "<pre>"; print_r($res); echo "</pre>";
  13. ?>

Jednak, że docelowo curl ma być wykorzystywany na wielu podstronach jednego serwisu chce opcję połączenia curla wstawić w funkcję i ją do pliku function.php a na pod stronach tylko się do niej odwoływać:


  1. <?php
  2. function curl_send( $COMMAND,$URL="http://localhost/command.php" )
  3. {
  4.    $ch = curl_init();
  5.    curl_setopt($ch,CURLOPT_URL,$URL);
  6.    curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
  7.    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  8.    curl_setopt($ch,CURLOPT_POST,1);
  9.    curl_setopt($ch,CURLOPT_USERAGENT,"client API");
  10.    curl_setopt($ch,CURLOPT_POSTFIELDS,$COMMAND);
  11.    curl_setopt($ch,CURLOPT_HEADER,0);
  12.    $response=curl_exec($ch);
  13. //    echo "$response<BR>";
  14.    curl_close($ch);
  15. }
  16. // poniższy kod będzie znajdował się na wielu podstronach lecz z inną zawartości "$post":
  17. $post = 'query[as]=a1&query[aa]=aaa1';
  18. $response = unserialize(curl_send($post));
  19. echo "<pre>"; print_r($response); echo "<pre>";
  20. ?>

Plik command.php:
  1. <?php
  2. if($_POST['query']['as'] == "a1") { echo "Wykonano połączenie"; } else { }
  3. ?>


Co robię źle, iż curl w funkcji działa lecz tylko gdy odhaszuje "// echo "$response<BR>";" jednak wtedy zwraca wszystko (wynik wszystkich wysłanych parametrów $post, a nie wyświetla to co chce czyli za pomocą "echo "<pre>"; print_r($response); echo "<pre>";" danej zawartości $post?

Ten post edytował kaszanka 13.03.2009, 20:31:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
wookieb
post
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




A gdzie masz return w funkcji?

Ten post edytował wookieb 13.03.2009, 20:35:28


--------------------
Go to the top of the page
+Quote Post
kaszanka
post
Post #3





Grupa: Zarejestrowani
Postów: 138
Pomógł: 1
Dołączył: 17.02.2007

Ostrzeżenie: (0%)
-----


Cytat(wookieb @ 13.03.2009, 20:34:59 ) *
A gdzie masz return w funkcji?
Dobre pytanie smile.gif

  1. <?php
  2. function curl_send( $COMMAND,$URL="http://localhost/command.php" )
  3. {
  4.   $ch = curl_init();
  5.   curl_setopt($ch,CURLOPT_URL,$URL);
  6.   curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0);
  7.   curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
  8.   curl_setopt($ch,CURLOPT_POST,1);
  9.   curl_setopt($ch,CURLOPT_USERAGENT,"client API");
  10.   curl_setopt($ch,CURLOPT_POSTFIELDS,$COMMAND);
  11.   curl_setopt($ch,CURLOPT_HEADER,0);
  12.   $response=curl_exec($ch);
  13. //    echo "$response<BR>";
  14.   curl_close($ch);
  15.               return $response;
  16. }
  17. // poniższy kod będzie znajdował się na wielu podstronach lecz z inną zawartości "$post":
  18. $post = 'query[as]=a1&query[aa]=aaa1';
  19. $response = unserialize(curl_send($post));
  20. echo "<pre>"; print_r($response); echo "<pre>";
  21. ?>

Teraz już działa, jedną zmienną miałem z dużych liter ;/ eh co za banały smile.gif



Tak aby nie tworzyć następnego tematu to już tutaj napiszę:

Po wysłaniu POST'em curla otrzymuje za pomocą:
  1. <?php
  2. echo "<pre>"; print_r($response); echo "</pre>";
  3. ?>

wynik:
  1. Array
  2. (
  3. [europa] => Array
  4. (
  5. [polska] => gwewh
  6. [polsffka] => gwewh
  7. )
  8. )

a jak chce tylko wyświetlić co jest w "[europa] [polska]":
  1. <?php
  2. echo $response['europa']['polska'];
  3. ?>

jednak nic nie wyświetla :|

A jeżeli dam samo:
  1. <?php
  2. echo $response['europa'];
  3. ?>
to wyświetli tylko dużą literę: "A" ;/

Ten post edytował kaszanka 14.03.2009, 02:59:55
Go to the top of the page
+Quote Post
Foxx
post
Post #4





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

Ostrzeżenie: (0%)
-----


Niemożliwe. Sprawdź czy na pewno nie zrobiłeś w swoim kodzie literówki. Sprawdź co wyświetli echo $response;
Go to the top of the page
+Quote Post
kaszanka
post
Post #5





Grupa: Zarejestrowani
Postów: 138
Pomógł: 1
Dołączył: 17.02.2007

Ostrzeżenie: (0%)
-----


  1. Array ( [europa] => Array ( [polska] => gwewh ) [afryka] => Array ( [0] => tunezja [1] => egipt ) )


Może coś źle napisałem w pliku "command.php" od którego pochodzą dane:
  1. <?php
  2. $resdata = array(
  3.      'europa' => array('polska' => 'gwewh', 'polska' => 'gwewh'),
  4.      'afryka' => array('tunezja', 'egipt')
  5.  );
  6.  print_r($resdata);
  7. ?>


Ten post edytował kaszanka 14.03.2009, 03:16:21
Go to the top of the page
+Quote Post
Foxx
post
Post #6





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

Ostrzeżenie: (0%)
-----


Ustalmy fakty, taki kod:

  1. <?php
  2. $resdata = array(
  3.     'europa' => array('polska' => 'gwewh', 'polska' => 'gwewh'),
  4.     'afryka' => array('tunezja', 'egipt')
  5. );
  6.  
  7. echo $resdata['europa']; // wyświetla "Array"
  8. echo $resdata['europa']['polska']; // wyświetla "gwewh"
  9. ?>

Czy u Ciebie jest inaczej? Jak?
Go to the top of the page
+Quote Post
kaszanka
post
Post #7





Grupa: Zarejestrowani
Postów: 138
Pomógł: 1
Dołączył: 17.02.2007

Ostrzeżenie: (0%)
-----


Kod w comand.php:
  1. <?php
  2. $response = array(
  3.      'europa' => array('polska' => 'gwewh', 'polska' => 'gwewh'),
  4.      'afryka' => array('tunezja', 'egipt')
  5.  );
  6.  print_r($response);
  7. ?>
i uruchomienie bezpośrednio strony comand.php
  1. <?php
  2. echo $resdata['europa']; // wyświetla "Array"
  3. echo $resdata['europa']['polska'];  // wyświetla "gwewh"
  4. ?>


Ale uruchomienie strony comand_send.php która pobiera dane curlem powoduje:
  1. <?php
  2. echo $resdata['europa']; // nic nie wyświetla"
  3. echo $resdata['europa']['polska'];  // wyświetla tylko luterkę "A"
  4. ?>
Go to the top of the page
+Quote Post
Foxx
post
Post #8





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

Ostrzeżenie: (0%)
-----


W takim razie zmodyfikuj ten ostatni kod tak i powiedz co wyświetla:
  1. <?php
  2. print_r($resdata);
  3. echo '<br>';
  4. print_r($resdata['europa']);
  5. echo '<br>';
  6. echo $resdata['europa']; // nic nie wyświetla"
  7. echo '<br>';
  8. print_r($resdata['europa']['polska']);
  9. echo '<br>';
  10. echo $resdata['europa']['polska'];  // wyświetla tylko luterkę "A"
  11. ?>
Go to the top of the page
+Quote Post
kaszanka
post
Post #9





Grupa: Zarejestrowani
Postów: 138
Pomógł: 1
Dołączył: 17.02.2007

Ostrzeżenie: (0%)
-----


  1. Array ( [europa] => Array ( [polska] => gwewh ) [afryka] => Array ( [0] => tunezja [1] => egipt ) )
  2. A
  3. A

Nie rozumiem tego :|
Go to the top of the page
+Quote Post
Foxx
post
Post #10





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

Ostrzeżenie: (0%)
-----


Ja też dostal.gif
Może rano ktoś spojrzy na to świeżym okiem...
Go to the top of the page
+Quote Post
kaszanka
post
Post #11





Grupa: Zarejestrowani
Postów: 138
Pomógł: 1
Dołączył: 17.02.2007

Ostrzeżenie: (0%)
-----


Doszedłem co jest nie tak z tym smile.gif
serialize i unserialize rozwiązało problem smile.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 09:13