Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Pobieranie treści strony
emiter
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.08.2009

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


Witam.

Czy da się wymusić w jakiś sposób by pobieranie treści strony zostało wykonane w 100% - uniemożliwić przerwanie tej operacji. Próbowałem pobrać treść spod pewnego url'a za pomocą file_get_contents($url) jak i z wykorzystaniem biblioteki curl. W obu przypadkach dopiero za którymś wywołaniem skryptu (odświeżeniem strony) ściągana była cała treść spod danego url'a, w pozostałych przypadkach tylko część. (W sumie to nawet nie wiem czy część. Po wyświetlenie tego co dostałem oczom ukazywało się morze krzaków (przypadkowych symboli)).

Czy da się coś z tym zrobić?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
r4xz
post
Post #2





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

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


  1.  
  2. ob_start("ob_gzhandler");
  3.  
  4.  


coś w tym stylu? (nierozumiem twojego problemu).



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





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Czy da się wymusić w jakiś sposób by pobieranie treści strony zostało wykonane w 100% - uniemożliwić przerwanie tej operacji.

No jak? Przecież jak nawala łącze, to nie za wiele zrobisz; możesz tylko sprawdzić, czy masz całość - strrpos i </html>, a jeśli masz nagłówek content-length, to sprawdzenie długości zwracanego ciągu.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
emiter
post
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.08.2009

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


strrpos to jasna sprawa tylko:
  1. $ch = curl_init($INARRAY['URI']);
  2. curl_setopt($ch, CURLOPT_USERAGENT, $INARRAY['USER_AGENT']);
  3. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  4. $Zawartosc=curl_exec($ch);
  5. curl_close($ch);

i gdy zrobię
  1. echo $Zawartosc;

to dostaję coś takiego:
�������íýÝrDz&�^ŻőŐ�Ó[����ůý´ ° ŞVU�ŃÖ&IH�l�\ÜÔ�šŮ6mó {ú�ď°ď�Í÷Ň{�đüŤ�Ę �� ĺěą#vo­DUf�GzÄWî��ó��ÍóĺtôËĂ�ëŃňéţÉl2zôĺăÇgtňřńÁć`ôĂ�ÍéÉ(ú*mî.nno.Ž?�Î�ýňđđvďńă÷ďß�ő�~u{÷óăÍęń?C[<\]~ů <
...
i gdzie ja mam w tym szukać '</html>' ?

ale jak już mówiłem za którymś razem dane są poprawne i ww. instrukcja wyświetla mi ściągniętą stronę
w sumie to nawet nie wiem czy powodem tego jest niepełne ściągnięcie danych spod url'a? tak mi jedynie podpowiada intuicja
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A może byś tak dał odpowiednik nagłówek accept i wykluczył z niego zawartość skompresowaną?


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
emiter
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.08.2009

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


Cytat(erix @ 5.09.2009, 12:57:13 ) *
A może byś tak dał odpowiednik nagłówek accept i wykluczył z niego zawartość skompresowaną?

To co mam wpisać w Accept-Encoding? nic? czy może 'identity'? czy może * i coś tam za nią?
Muszę przyznać że zielony z tego jestem.
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




* - oznacza dowolny, czyli akceptowany jest również skompresowany.

Zobacz, jakie przykładowe accept jest wysyłane przez przeglądarkę i trochę pogłówkuj.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
franki01
post
Post #8





Grupa: Zarejestrowani
Postów: 508
Pomógł: 75
Dołączył: 2.11.2005
Skąd: Bydgoszcz

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


  1. curl_setopt($ch, CURLOPT_HTTPHEADER, Array('Accept: text/html,application/xhtml+xml,application/xml'));
Go to the top of the page
+Quote Post
emiter
post
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.08.2009

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


Cytat(erix @ 6.09.2009, 19:13:31 ) *
Zobacz, jakie przykładowe accept jest wysyłane przez przeglądarkę i trochę pogłówkuj.

A jak to można sprawdzić?
Czy zamiast dawać w headersach Accept-Encoding: gzip;q=0, compress;q=0, itd... nie wystarczy w CURLOPT_ENCODING => 'false'?
A do tego jeszcze sprecyzować Content-Lenght? Web-Sniffer stwierdził że zawartość nieskompresowana tej strony to 180kB.
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
A jak to można sprawdzić?

Masz Firebuga, to sprawdzisz.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
emiter
post
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.08.2009

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


Oka.
Zabanglało przy:
  1. $header[0] = "'Accept: xml/xhtml, text/plain, text/html'";
  2. $header[] = "'Content-Length: 250000'"; //tak z lekkim zapasem tongue.gif
  3.  
  4. $ch = curl_init($url);
  5. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  6. curl_setopt($ch, CURLOPT_ENCODING, 'false'); //wszelka kompresja wyłączona
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  8. $zawartoscSite=curl_exec($ch);
  9. curl_close($ch);

yahoo.gif
Dzięki za wskazówki

Cytat(emiter @ 7.09.2009, 18:15:35 ) *
Zabanglało przy:

Przedwczesna radość
Dobra, teraz konkretnie. Strona która ściągam to
http://bossa.pl/index.jsp?layout=3&pag...;zakladka=akcje

skrypt wygląda tak:
  1. $url = 'http://bossa.pl/index.jsp?layout=3&page=0&news_cat_id=268&cl=przebieg&zakladka=akcje';
  2.  
  3. $header[0] = "'Accept: xml/xhtml, text/plain, text/html'";
  4. $header[] = "'Content-Length: 250000'";
  5. $header[] = "'Connection: keep-alive'";
  6. $header[] = "'Keep-Alive: 300'";
  7. $header[] = "'Cache-Control: no-store'";
  8.  
  9. $ch = curl_init($url);
  10. curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
  11. curl_setopt($ch, CURLOPT_ENCODING, 'false');
  12. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  13. $zawartoscSite=curl_exec($ch);
  14. curl_close($ch);
  15.  
  16. echo $zawartoscSite = mb_convert_encoding($zawartoscSite, 'iso-8859-2', 'utf-8');

Jak widać na stronie umieszczone są notowania spółek giełdowych.
O ile kod który zaprezentowałem powyżej działa o tyle pojawiają się pewne błędy ze ściąganymi wartościami.
Otóż:
dla każdej spółki przedstawiony jest czas kiedy to ostatni raz zmieniła się jej cena (kolumna 6)
uruchamiam skrypt kilka razy pod rząd i wyświetlam wynik (wyświetla mi się strona)
z tym że jeżeli mamy spółkę której kurs zmienia się co kilka/naście/dziesiąt sekund (np. KGHM) to za każdym uruchomieniem skryptu wyświetla się inny czas w kol. 6, a dokładnie czasy (i wartości pozostałych kolumn w sumie też) z kilku ostatnich zmian kursu danej spółki. Dokładnie tak jakby gdzieś były przechowywane poprzednie wersje tej strony sprzed kilkunastu sekund.
Natomiast kiedy normalnie wejdę na daną stronę to po każdym odświeżeniu dane są prawidłowe
Myślałem że to strona jest gdzieś keszowana ale ustawienie Cache-Control na no-store, no-cache czy max-age=1 nic nie dało.
O co może chodzić? dry.gif

Ten post edytował emiter 8.09.2009, 13:10:58
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 - 21:02