Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: curl - nie wyświetla treści strony
Forum PHP.pl > Forum > PHP
Rozpalacz
Może ktoś ma pomysł dlaczego nie mogę otrzymać treści strony.
Chcę docelowo zalogować się na ebok.pl i na bieżąco sprawdzać stan konta, czy już przekroczyłem pakiet darmowych minut czy jeszcze.
... ale póki co nie potrafię nawet wyświetlić tej strony sad.gif

Próbowałem również z
  1. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

ale dalej nic się nie wyświetla.
  1. <?php
  2.  
  3. $COOKIEFILE = $_SERVER['DOCUMENT_ROOT'] . '/../data/config/ebok.txt';
  4.  
  5. $ch = curl_init();
  6. curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  7. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  8. curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIEFILE);
  9. curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIEFILE);
  10. curl_setopt($ch,CURLOPT_RETURNTRANSFER, 0);
  11.  
  12. curl_setopt($ch,CURLOPT_HTTPHEADER, array('Content-type: application/x-www-form-urlencoded',
  13. 'Accept: text/html,application/xhtml+xml,application/xml',
  14. 'Accept-Encoding: gzip,deflate,sdch',
  15. 'Accept-Language: pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4',
  16. 'Connection: keep-alive',
  17. 'User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36')
  18. );
  19. //curl_setopt($ch, CURLOPT_URL, 'http://www.ebok.pl');
  20. curl_setopt($ch, CURLOPT_URL, 'https://ssl.plusgsm.pl/ebok-web/');
  21. echo curl_exec($ch);
  22.  
  23.  
  24. ?>
expert
Masz CURLOPT_RETURNTRANSFER na 0, przez co Ci nie wyświetla odebranych danych.

Czy te nagłówki w CURLOPT_HTTPHEADER są konieczne? Piszę w drodze, więc nie mam jak sprawdzić. Spróbuj w pierw bez CURLOPT_HTTPHEADER.
Rozpalacz
Jak dam CURLOPT_RETURNTRANSFER na 1 to też nic nie wyświetla.

HEADERY zakomentowałem i też nic.
expert
Dodaj do kodu
  1. curl_setopt($ch, CURLOPT_HEADER, true);

i zobacz co Ci strona w nagłówkach zwraca, może czegoś nie podajesz i jest przekierowanie (np. 302 i Location).

Edit:
Może być np. kilka przekierowań w celu utworzenia ciasteczek.
Rozpalacz
Może jak będziesz miał dostęp do komputera to zweryfikujesz? smile.gif

Będę wdzięczny.

takie coś:
Kod
$result = curl_exec($ch);
if ($result === false) die(curl_error($ch));

daje mi komunikat na stronie:
Kod
error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac
expert
Wywal CURLOPT_SSL_VERIFYPEER, curl sam rozpoznaje https. Jak robiłem logowanie do mBanku to nie używałem CURLOPT_SSL_VERIFYPEER.
Rozpalacz
Prośba,

zweryfikuj jak będziesz miał dostęp do komputera smile.gif
expert
Przy:
  1. $ch = curl_init();
  2. curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  3. curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIEFILE);
  4. curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIEFILE);
  5. curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
  6. curl_setopt($ch, CURLOPT_HEADER, true);
  7. curl_setopt($ch, CURLOPT_URL, 'https://ssl.plusgsm.pl/ebok-web/');
  8. echo str_replace('<','&lt;',curl_exec($ch));

Masz:
Cytat
HTTP/1.1 200 OK Date: Wed, 19 Nov 2014 19:34:16 GMT Server: IBM_HTTP_Server Last-Modified: Thu, 12 Apr 2012 07:14:52 GMT ETag: "16437-fa-1cb11300" Accept-Ranges: bytes Content-Length: 250 Cache-Control: max-age=91980 Expires: Thu, 20 Nov 2014 21:07:16 GMT MS-Author-Via: DAV Content-Type: text/html <html> <head> <title>Plus Online</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <meta http-equiv="refresh" content="0;URL=index.jsp"> </head> <body> <a href="index.jsp">Plus Online</a> </body> </html>

Pochylone to nagłówek.

Wychodzi na to, ze za pomocą meta masz przekierowanie do https://ssl.plusgsm.pl/ebok-web/index.jsp. Po podmianie w CURLOPT_URL adresu mamy:

  1. $ch = curl_init();
  2. curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  3. curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIEFILE);
  4. curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIEFILE);
  5. curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
  6. curl_setopt($ch, CURLOPT_HEADER, true);
  7. curl_setopt($ch, CURLOPT_URL, 'https://ssl.plusgsm.pl/ebok-web/index.jsp');
  8. echo str_replace('<','&lt;',curl_exec($ch));


W efekcie:

Cytat
HTTP/1.1 302 Found Date: Wed, 19 Nov 2014 19:35:59 GMT Server: IBM_HTTP_Server Location: https://ssl.plusgsm.pl/ebok-web/basic/loginStep1.action?brandId=Postpaid Set-Cookie: JSESSIONID=00009SBRmZ_o0APVPW1upLtGZi1:141d2eogm; Path=/ Expires: Thu, 01 Dec 1994 16:00:00 GMT Cache-Control: no-cache="set-cookie, set-cookie2" MS-Author-Via: DAV Transfer-Encoding: chunked Content-Type: text/html;charset=UTF-8 Content-Language: pl


Co daje nam przekierowanie na https://ssl.plusgsm.pl/ebok-web/basic/loginStep1.action?brandId=Postpaid. Ciasteczka same się wpiszą przez komendę 'CURLOPT_COOKIEJAR'. Po wejściu w podany adres ma już formularz logowania.

:-)
Rozpalacz
Czyli komplet jak powinien wyglądać? By otworzyła się strona logowania? Bo nie mogę dojść do tego.
Może mam jakieś ograniczenia na serwerze. Jeśli podesłałbyś mi kompletny skrypt, który działa u Ciebie, tworzy ciasteczka, o których piszesz i otwiera stronę logowania to będę bardzo wdzięczny.
Przynajmniej będę miał kryteria wyboru serwera na którym mam to postawić smile.gif

Wykorzystałem Twój fragment i zrobiłem takie coś:
  1. <?php
  2.  
  3. $COOKIEFILE = 'ebok.txt';
  4.  
  5. $ch = curl_init();
  6. curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
  7. curl_setopt($ch, CURLOPT_COOKIEJAR, $COOKIEFILE);
  8. curl_setopt($ch, CURLOPT_COOKIEFILE, $COOKIEFILE);
  9. curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
  10. curl_setopt($ch, CURLOPT_HEADER, true);
  11. curl_setopt($ch, CURLOPT_URL, 'https://ssl.plusgsm.pl/ebok-web/');
  12. // echo str_replace('<','&lt;',curl_exec($ch));
  13.  
  14. $result = curl_exec($ch);
  15. if ($result === false) die(curl_error($ch));
  16.  
  17. ?>

otrzymuję odpowiedź
Kod
error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac


Czy u Ciebie też pojawia się taki błąd czy wszystko jest OK? Co powinienem mieć włączone na serwerze PHP by nie dostawać takiego komunikatu?
Jaką masz wersję OpenSSL? Na jakim systemie? U mnie jest wersja OpenSSL 1.0.1e i podobno ona zawiera błąd który wyświetlany jest w moim przypadku.

Dzięki z góry za podesłanie Twojego skryptu.

OK, działa

dodałem:
  1. curl_setopt($ch, CURLOPT_SSLVERSION, 1);
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.