Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: HTTP Basic Authorization - jak wysłać nagłówek
Forum PHP.pl > Forum > PHP
who?
Witam,
Sprawa wygląda tak, że mam na serwerze katalog chroniony hasłem, a do jego ochrony wykorzystywana jest podstawowa metoda uwierzytelniania HTTP. Teraz chciałbym napisać skrypt, który mógłby się dostać do tego katalogu bez wywoływania standardowego okna logowania. Czyli muszę jakimś sposobem wysłać do tego serwera odpowiednio spreparowany nagłówek, który będzie zawierał wszystkie te dane jakie wysyła przeglądarka po wpisaniu danych do (standardowego) okna logowania. I teraz pytanie brzmi jak to zrobić? header() chyba odpada, bo on tylko odpowiada nagłówkiem klientowi, który łączy się z nami (może się mylę)? Ma ktoś może jakieś propozycje jak to zrobić?

Pozdrawiam,
who?
chomiczek
Tutaj odpisałem na innego posta. To jest dokładnie dla Ciebie.. tutaj
who?
Cytat(chomiczek @ 2006-03-05 18:45:59)
Tutaj odpisałem na innego posta. To jest dokładnie dla Ciebie.. tutaj

Wielkie dzięki... w końcu udało mi się połączyć. Ale znowu mam problem:( Chciałbym zrobić coś takiego, że wysyłam do katalogu dane do zalogowania i później mogę sobie swobodnie z niego pobierać np. zdjęcia i wyświetlać je na stronie. Niestety kiedy korzystam z tego co podesłałeś sprawa wygląda tak, że następuje połączenie (tzn. przeglądarka nie wywala okna logowania), ale mimo wszystko nie mogę pobrać nic z katalogu. Narazie skończyły mi się pomyśły jak to rozwiązać - może masz na to jakiś sposób?

Pozdrawiam,
who?
chomiczek
Jeśli strona jest w miarę "sztywna" nie zmienia sie jej kod to można spróbowac preg_match_all, a potem np.:
  1. <?php
  2.  
  3. preg_match_all("/65 nowrap>(C[\d]{7}) .*class=tah8y>([\d]{0,3})\xc2?\xa0?([\d]{1,3},[\d]{2})\x20z.*td><td class=tah8yb align=center>(\+|\-)<.* >&nbsp;(.*)&nbsp;<img src=\/pic\/go.gif border=0><\/a><\/td><td nowrap ><.*  >(.*)&nbsp;<img/Us", $data, $matches);
  4.  
  5. for($i=0; $i<count($matches[0]); $i++) {
  6. $matches[3][$i]=str_replace(",", ".", $matches[3][$i]);
  7. }
  8. ?>


zmienna $data jest tak jak w poście wcześniejszym
who?
Czyli rozumiem, że nie ma opcji zrobienia tego tak, żeby bez zbędnych zabiegów następowało raz logowanie do katalogu, a później pobieram sobie zniego ile tylko chce (tak jak jest standardowo po zalogowaniu przez przeglądarkę)?

Pozdrawiam,
who?
chomiczek
a jak chcesz niby to robić?? przecież nie będziesz sam klikał w linki czy fotki?? Przecież jakos musisz znaleźć w kodzie te fotki i coś z nimi zrobic.
who?
Cytat(chomiczek @ 2006-03-07 09:32:04)
a jak chcesz niby to robić?? przecież nie będziesz sam klikał w linki czy fotki?? Przecież jakos musisz znaleźć w kodzie te fotki i coś z nimi zrobic.

Chyba się nie rozumiemy dlatego wyjaśnie to dokładniej. Mam stronę na serwerze www.mojastrona.pl. Na tym serwerze jest katalog www.mojastrona.pl/images/, w którym znajdują się zdjęcia, ale nie mogą one zostać przez nikogo kto nie zaloguje się na stronie obejrzane. Wymyśliłem więc, że zrobię to tak, że katalog zabezpiecze przy użyciu podstawowego uwierzytelniania apacha dzięki czemu nikt nie będzie mógł zrobić czegoś takiego www.mojastrona.pl/images/zdjecie.jpg itd. Problem jednak jest teraz taki, że po zalogowaniu użytkownika na stronie musi on mieć możliwość wczytania tych zdjęć (również nie wszystkich - dlatego nie może znać hasła do katalogu). W założeniu skrypt php miał wysłać dane uwierzytelniające do www.mojastrona.pl/images/ i później na stronce sobie normalnie wyświetlałem wybrane zdjęcia z tego katalogu. Przy użyciu tej metody, którą przestawiłeś jestem w stanie uzyskać kod dokumentu/zdjecia czy czego tam chcę, ale nie mogę uzyskać "ciągłego" dostępu do katalogu. Gdyby jeszcze jakoś było można pobierać pojedyńczo zdjęcia (teraz pobieram ich kod, który wyświetla mi się na stronie), to już by było nieźle. Mam nadzieję, że teraz jaśniej to przedstawiłem. Być może jest jakiś łatwiejszy sposób na zrobienie czegoś podobnego, więc jeśli da radę to jakoś inaczej zrobić to nie będę się upierał co do tego Basic Authorization winksmiley.jpg

Pozdrawiam,
who?
chomiczek
a spróbuj użyć na samym końcu
  1. <?php
  2. echo $data
  3. ?>
jesli zastosowałeś dokładnie te zmienne o których pisałem w jednym z postów.
Wyświetli Ci sie wtedy cała zawartosć strony wczytana do zmiennej
who?
Próbowałem, ale mnie zawartość strony w niczym nie pomaga, bo jeśli w stronie jest <img src="www.mojastrona.pl/images/zdjecie.gif"> to ono i tak się nie wyświetli bo nie ma dostępu do tego katalogu. Próbowałem też jako ścieżkę do CURLOPT_URL podać "www.mojastrona.pl/images/zdjecie.gif" i później echo $data, ale zamiast zdjęcia mam jego kod sad.gif

Pozdrawiam,
who?
chomiczek
cos chyba źle robisz.. jeśli dasz echo $data to masz zobaczyć zawartosc strony.. P.S. może pokaż kawałek kodu.
who?
Cytat(chomiczek @ 2006-03-07 12:31:45)
cos chyba źle robisz.. jeśli dasz echo $data to masz zobaczyć zawartosc strony.. P.S. może pokaż kawałek kodu.

Więc tak w www.mojastrona.pl/images/ jest index.html, który ma taki kod:

  1. <img src="zdjecie.gif">


Teraz łącze się przy użyciu twojej metody i robie echo $data, co mi daje wynik na stronie:

  1. <img src="zdjecie.gif">


Czyli mamy dostęp do katalogu i kod pliku index.html został pobrany. Tylko co z tego, jeśli zdjęcie się nie wyświetli. Ja nie chce pobierać kodu strony, a zdjęcia które znajdują się w tym katalogu. Mam nadzieje, że teraz rozumiesz o co mi chodzi.

Pozdrawiam,
who?
chomiczek
a możesz pokazać caly kod?? łącznie z hasłem, żebym mógł potestować.. zmień najwyżej hasło do katalogu i pokaż

a czy czasem nie wykonujesz tego skryptu z innego serwara i moze sie okazuje, że w podanej lokalizacji nie ma tego pliku.
who?
Poszło na PW - daj znać jak na coś wpadniesz.

Pozdrawiam,
who?
chomiczek
Rozwiązanie jest tutaj: http://www.designstudio.com.pl/test/test.php
potrzebujemy 2 pliki:
1. test.php
  1. <?php
  2. $ch = curl_init();
  3. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  4. curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1");
  5. curl_setopt($ch, CURLOPT_USERPWD, "aaa:aaa");
  6. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  7. curl_setopt($ch, CURLOPT_URL, "http://sig.tivi.net.pl/haslo/index.php");
  8.  
  9. $data=curl_exec($ch);
  10. curl_close($ch);
  11.  
  12. preg_match_all("/<img src=\".*haslo\/(.*).gif\">/Us", $data, $matches);
  13.  
  14. for($i=0; $i<count($matches[0]); $i++) {
  15. print ("<img src=img.php?foto=".$matches[1][$i].">");
  16. }
  17. ?>

2. img.php
  1. <?php
  2. $foto = curl_init();
  3. curl_setopt($foto, CURLOPT_RETURNTRANSFER, 1);
  4. curl_setopt($foto, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1");
  5. curl_setopt($foto, CURLOPT_USERPWD, "aaa:aaa");
  6. curl_setopt($foto, CURLOPT_URL, "http://sig.tivi.net.pl/haslo/".$_GET['foto'].".gif");
  7.  
  8. $data2=curl_exec($foto);
  9. curl_close($foto);
  10.  
  11. print($data2);
  12. ?>


Najważniejsze, aby dobrze przygotowac pliki ze zdjęciami w tym przypadku index.php znajdujący się na Twoim serwerze.. wystrczy, że podasz samą nazwe pliku, jesli jednak to zmienisz modyfikuj kod
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.