Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> zwrócony nagłówek, CURL i preg_match
ennics
post
Post #1





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

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


czesc,
wykorzystuje curl do odczytania nagłówka wysyłanego przez stronę,
niestety nie wiem jak zwrócony nagłówek poddać dalszej obróbce...
np. przez preg_match chcę wyciągnąć ID sesji
  1. <?php
  2.  
  3. $ch = curl_init();
  4. $user_agent = &#092;"Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)\";
  5. $url = &#092;"http://www.goo.pl/RM/c/RI_CME.GBL\";
  6. $params = &#092;"userid=enx&pwd=y76yghjy!&postDataBin=y\";
  7.  
  8.     curl_setopt($ch, CURLOPT_URL, $url);
  9.     curl_setopt($ch, CURLOPT_HEADER, 1);
  10.     curl_setopt($ch, CURLOPT_NOBODY, 1);
  11.  
  12. // 1 sposób:
  13.     //$result = curl_exec($ch);
  14.     $result = preg_match(&#092;"/ldcw010-10001-PORTAL-PSJSESSIONID/\", curl_exec($ch), $matches); 
  15.  
  16. // 2 sposób
  17.  
  18.     $result = curl_exec($ch);
  19.     $result = preg_match(&#092;"/ldcw010-10001-PORTAL-PSJSESSIONID/\", $result, $matches);
  20.  
  21. print_r($matches);
  22. curl_close($ch);
  23.  
  24. ?>

1 i 2 sposób nie działają z prostej przyczyny że curl_exec w przypadku ustawienia CURLOPT_NOBODY zwraca 1...
jak zwracany jest nagłówek ? jak mam wykonać na nim jakieś operacje ?

Ten post edytował ennics 16.04.2005, 13:35:46
Go to the top of the page
+Quote Post
rolnix
post
Post #2





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 16.04.2005
Skąd: Białowieża

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


Z tego, co wyczytałem w manualu php, cytat:

Notatka: If you want to have the result returned instead of it being printed to the browser directly, use the CURLOPT_RETURNTRANSFER option of curl_setopt().

Tłumaczenie (niedokładne, ale zrozumiałe):

Notatka: Jeżeli chcesz, żeby curl_exec() zwracał wynik zapytania zamiast wyświetlania w oknie przeglądarki, użyj opcji CURLOPT_RETURNTRANSFER przez funkcję curl_setopt()." title="Zobacz w manualu PHP" target="_manual

Ustaw tą opcję, a funkcja zwróci co trzeba (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
ennics
post
Post #3





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

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


czytałem manual (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
ale tak jak napisałem powyżej
Cytat
1 i 2 sposób nie działają z prostej przyczyny że curl_exec w przypadku ustawienia CURLOPT_NOBODY zwraca 1.

jeśli ustawisz CURLOPT_NOBODY, 0 jako rezultat zostanie zwrócona sekcja <html>...</html> ( w przypadku http ), CURLOPT_RETURNTRANSFER nie zwraca nagłówka!

problem udało mi się częściowo rozwiązać (manula był wciągający)
  1. <?php
  2.  
  3.  
  4. function header_response( $ch, $str )
  5. {
  6.   $length = strlen( $str );
  7.   print $length; 
  8. }
  9.  
  10. $ch = curl_init();
  11.  
  12. switch ( $_SESSION['status'] )
  13. {
  14.  
  15.   default: // snip: ldcw010-10001-PORTAL-PSJSESSIONID
  16.     curl_setopt($ch, CURLOPT_URL, $url);
  17.     curl_setopt($ch, CURLOPT_HEADER, 1);
  18.     curl_setopt($ch, CURLOPT_NOBODY, 1);
  19.     curl_setopt($ch, CURLOPT_HEADERFUNCTION, &#092;"header_response\");
  20.     
  21.     $result = curl_exec($ch);
  22.  
  23.     $_SESSION['status'] = 'snip_PS_TOKEN';
  24.   break;
  25. }
  26.  
  27. curl_close($ch);
  28.  
  29. ?>

po wykorzystaniu CURLOPT_HEADERFUNCTION zwraca nagłówek... ale tylko pierwszą linię ;/ HTTP/1.1 500 Internal Server Error 36

nie wiem jak zrobić żeby zwracało pełny nagłówek...
ma ktoś jakieś pomysły ?

szukałem po sieci i znalazłem obiektowe podejście do problemu

  1. <?php
  2.  
  3. curl_setopt ($ch, CURLOPT_HEADERFUNCTION, array(&$this,&#092;"curl_header_read\"));
  4.  
  5. ?>


próbowalem to wykorzystać...

  1. <?php
  2.  
  3. class firefrost
  4. {
  5.   public function __construct()
  6.   {
  7.     $this -> ch = curl_init();
  8.  
  9.     switch ( $_SESSION['status'] )
  10.     {
  11.  
  12.       default: // snip: ldcw010-10001-PORTAL-PSJSESSIONID
  13.         curl_setopt($this -> ch, CURLOPT_URL, $this -> url);
  14.         curl_setopt($this -> ch, CURLOPT_HEADER, 1);
  15.         curl_setopt($this -> ch, CURLOPT_NOBODY, 1);
  16.         curl_setopt($this -> ch, CURLOPT_HEADERFUNCTION, array($this, 'read_header')); // teraz jest ok
  17.       break;
  18.     }
  19.     curl_close($this -> ch);
  20.   }
  21.  
  22.   public function read_header( $ch, $string ) 
  23.   {
  24.     $len = strlen( $string );
  25.     echo &#092;"HEADER: GOT $stringn\";
  26.     return $len;
  27.   }
  28. }
  29.  
  30. $nowy = new firefrost();
  31.  
  32. ?>


ale teraz kiedy wywołuje CURLOPT_HEADERFUNCTION z parametrem array to apache się wykrzacza.

edit: sorry, działa, jebnąłem się dając inną nazwę funkcji (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) LOL

Ten post edytował ennics 16.04.2005, 16:35:02
Go to the top of the page
+Quote Post
rolnix
post
Post #4





Grupa: Zarejestrowani
Postów: 115
Pomógł: 0
Dołączył: 16.04.2005
Skąd: Białowieża

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


Wg mnie zwraca jedną, bo przy błędzie 500 chyba tylko jedna jest zwracana... Chyba.
Go to the top of the page
+Quote Post
ennics
post
Post #5





Grupa: Zarejestrowani
Postów: 312
Pomógł: 0
Dołączył: 29.12.2004

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


zwracany jest cały nagłówek, obojętnie jaką odpowiedź otrzyma przeglądarka

Kod
HTTP/1.1 500 Internal Server Error HTTP/1.1 500 Internal Server Error
Date: Sat, 16 Apr 2005 15:44:00 GMT Date: Sat, 16 Apr 2005 15:44:00 GMT
Server: WebLogic XMLX Module 8.1 SP1 Fri Jun 20 23:06:40 PDT 2003 271009 with CR174605 Server: WebLogic XMLX Module 8.1 SP1 Fri Jun 20 23:06:40 PDT 2003 271009 with CR174605
Content-Length: 883 Content-Length: 883
Content-Type: text/html Content-Type: text/html
Set-Cookie: ldcw020-10001-PORTAL-PSJSESSIONID=ChyAE5DNCp92eBuCSMIoLR9gmgnSEigb!-641607186; path=/ Set-Cookie: ldcw020-10001-PORTAL-PSJSESSIONID=ChyAE5DNCp92eBuCSMIoLR9gmgnSEigb!-641607186; path=/
Connection: Close Connection: Close
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 17.09.2025 - 23:40