Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: skrypt, który ma się sam zalogować
Forum PHP.pl > Forum > PHP
Morian
napisałem skrypt, który za pomocą funkcji fopen() odczytuje bazę danych w xml'u spod adresu http://..../baza.xml. Problem w tym, że żeby odczytać tę bazę na tej stronie wymagana jest autoryzacja (hasło i login oczywiście mam), a ja nie bardzo wiem, jak skrypt ma się tam sam zalogować, a potem odczytać dane...
próbowałem przez wykorzystanie header(), ale nie da rady, bo od razu przekierowuje na tamtą stronę i nie odczytuje...; podobno muszę posłużyć się $_GET... i podono fukcję fopen() muszę zastąpić czymś innym...
bardzo proszę o pomoc i z góry dziękuję za wszyskie odpowiedzi.
kuna
cURL albo fsockopen
Morian
nie da rady
Hacker
hmmm...
jeżeli fsockopen+fwrite+fread i/lub fgets nie da rady to jestem chińską księżniczką tongue.gif
Athlan
Cytat(Morian @ 2006-04-29 14:07:46)
napisałem skrypt, który za pomocą funkcji fopen() odczytuje bazę danych w xml'u spod adresu http://..../baza.xml. Problem w tym, że żeby odczytać tę bazę na tej stronie wymagana jest autoryzacja (hasło i login oczywiście mam), a ja nie bardzo wiem, jak skrypt ma się tam sam zalogować, a potem odczytać dane...
próbowałem przez wykorzystanie header(), ale nie da rady, bo od razu przekierowuje na tamtą stronę i nie odczytuje...; podobno muszę posłużyć się $_GET... i podono fukcję fopen() muszę zastąpić czymś innym...
bardzo proszę o pomoc i z góry dziękuję za wszyskie odpowiedzi.

ten sam efekt chcę uzyskać w temacie http://forum.php.pl/index.php?showtopic=46112 - loguje się na pocztę i czyta messy
Morian
próbuję za pomocą fsockopen, ale nie wychodzi... oto kod:
Kod
<?
include("config.inc.php");

$pass=$cfg['auth_user'];
$user=$cfg['auth_pass'];

$fp=fsockopen("www.strona.pl", 80, $errno, $errstr);
if (!$fp)
{
  echo "$errstr ($errno) \n";
  echo $fp;
}
else
{
  fputs($fp, "GET /bazy/baza.xml HTTP/1.1\r\n");
  fputs($fp, "Host: www.strona.pl\r\n");
  fputs($fp, "Authorization: Basic ".base64_encode("$pass:$user")."\r\n");
  fputs($fp, "Connection: close\r\n\r\n");
}

while ( $data = fread($fp,4096) )
{
  if (!xml_parse($xml_parser, $data, feof($fp)))
  {
    echo(sprintf("XML error: %s at line %d\n",
         xml_error_string(xml_get_error_code($xml_parser)),
         xml_get_current_line_number($xml_parser)));
    break;
  }
}
?>

może wiesz, gdzie tkwi błąd panie Hacker? z góry dzięki za pomoc.
Hacker
Po pierwsze [ php ]

Po drugie najpierw odczytaj cały plik a potem go parsuj
  1. <?php
  2.  
  3.  $dane = file_get_contents;
  4. while (!feof($fp)) {
  5. $dane .= fread($fp, 8192);
  6. }
  7. if (!xml_parse($xml_parser, $dane, true))
  8.  {
  9.  echo(sprintf("XML error: %s at line %d\n",
  10. xml_error_string(xml_get_error_code($xml_parser)),
  11. xml_get_current_line_number($xml_parser)));
  12.  }
  13. ?>

Po trzecie może byś podał co wyświetla Ci skrypt co??
Morian
1. tam oczywiście jest [php]
2. teraz już jest połączenie i odczytuje część danych, ale po odczytaniu pojawia się następujący komunikat: "XML error: not well-formed (invalid token) at line 1".
prawdopodobnie w pewnym momencie zrywa połączenie, ponieważ trzeba ustawić czas... próbowałem ustawić, ale nadal pojawia się komunikat "XML error: not well-formed (invalid token) at line 1" i odczytuje tyle samo danych... a oto kod:
[CODE][COLOR=red]
<?php
...
$fp=fsockopen("www.strona.pl", 80, $errno, $errstr, 80);
if (!$fp)
{
echo "$errstr ($errno) \n";
echo $fp;
}
else
{
$out="GET /bazy/lm.xml HTTP/1.1\r\n";
$out.="Host: www.strona.pl\r\n";
$out.="Authorization: Basic ".base64_encode("$pass:$user")."\r\n";
$out.="Connection: close\r\n\r\n";
fputs($fp,$out);
}

$xml_parser = xml_parser_create();
xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, 0);
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");

//stream_set_timeout($fp, 100);
while ( $data = fread($fp,4096) )//reading file
{
echo ($data);
stream_set_timeout($fp, 1000);
if (!xml_parse($xml_parser, $data, feof($fp)))
{
echo(sprintf("XML error: %s at line %d\n",
xml_error_string(xml_get_error_code($xml_parser)),
xml_get_current_line_number($xml_parser)));
break;
}
}//while
...
?>
Hacker
z [ php ] chodziło mi o odpowiedni bbcode
podaj adres tej stronki, z której chcesz ściągnąć tego xml-a
  1. <?php
  2.  
  3. $fp=fsockopen("www.strona.pl", 80, $errno, $errstr, 80);
  4.  
  5. ?>

większego timeouta daj
Morian
sorry, ale nie mogę podać ci adresu tej stronki;
teraz odczytuje wszystkie dane, ale wygląda na to, że parser nie wywołuje "startElement", "endElement" i "characterData"...questionmark.gif? a timeouta dawałem już większego i nic...
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.