Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]cURL - Follow Location
Forum PHP.pl > Forum > Przedszkole
xionc121
Dobry, mam skrypt, który loguje się na inną stronę poprzez cURL'a. Niestety mój hosting ma open_basedir, przez co followlocation nie działa :c. Znalazłem "zamiennik" jednakże nie ogarniam go...
Kod
<?php
function curl_exec_follow(/*resource*/ $ch, /*int*/ &$maxredirect = null) {
    $mr = $maxredirect === null ? 5 : intval($maxredirect);
    if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off')) {
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $mr > 0);
        curl_setopt($ch, CURLOPT_MAXREDIRS, $mr);
    } else {
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
        if ($mr > 0) {
            $newurl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

            $rch = curl_copy_handle($ch);
            curl_setopt($rch, CURLOPT_HEADER, true);
            curl_setopt($rch, CURLOPT_NOBODY, true);
            curl_setopt($rch, CURLOPT_FORBID_REUSE, false);
            curl_setopt($rch, CURLOPT_RETURNTRANSFER, true);
            do {
                curl_setopt($rch, CURLOPT_URL, $newurl);
                $header = curl_exec($rch);
                if (curl_errno($rch)) {
                    $code = 0;
                } else {
                    $code = curl_getinfo($rch, CURLINFO_HTTP_CODE);
                    if ($code == 301 || $code == 302) {
                        preg_match('/Location:(.*?)\n/', $header, $matches);
                        $newurl = trim(array_pop($matches));
                    } else {
                        $code = 0;
                    }
                }
            } while ($code && --$mr);
            curl_close($rch);
            if (!$mr) {
                if ($maxredirect === null) {
                    trigger_error('Too many redirects. When following redirects, libcurl hit the maximum amount.', E_USER_WARNING);
                } else {
                    $maxredirect = 0;
                }
                return false;
            }
            curl_setopt($ch, CURLOPT_URL, $newurl);
        }
    }
    return curl_exec($ch);
}
?>

Chciałbym się dowiedzieć, gdzie w powyższy skrypy mam wlepić to zrobiłem wcześniej, czyli:
Kod
$login = "a";
$haslo = "b";
$serwer = "c";
$cookie = './cookie.txt';
$useragent = 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'');
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,'1111111111111111111111111111111111111111111'');
curl_setopt($ch, CURLOPT_REFERER, '222222222222222222222222');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$wynik = curl_exec($ch);
curl_close($ch);
print_r($wynik[0]);

Siedzę już godzinę nad tym "zamiennikiem" i nie mam bladego pojęcia co jest czym i do czego powlepiać to co wyżej podałem....
Jeśli ktoś byłoby skory wytłumaczyć i podpowiedzieć, jak połączyć "to coś" w jedność, bardzo bym dziękował.
Pozdrawiam
wNogachSpisz
http://pear.php.net/package/HTTP_Request2/

  1. <?php
  2. $config = array(
  3. 'follow_redirects' => true,
  4. 'max_redirects' => 5,
  5. );
  6. $request = new HTTP_Request2( $config );
  7. $request->setUrl('http://go.to.hell');
  8. $response = $this->request->send();
  9. $response_body = $response->getBody();
  10. print( $response_body );

Sześcioma liniami robie tyle co Ty osiemdziesięcioma.
xionc121
No fajnie kolego, aczkolwiek nie rozumiem powyższego kodu i powiedz mi, jak mam dodać tutaj możliwość wpisana hasła i loginu oraz świata gry?
Proszę o wytłumaczenie.
Pozdrawiam
wNogachSpisz
Skąd mam wiedziec gdzie trzeba dać login? W Twoim przykladnie zmienna $login po zdefiniowaniu nie zostaje już użyta.
xionc121
Kod
$login = "login";
$haslo = "haslo";
$serwer = "666";
$cookie = 'cookie.txt';
$useragent = 'Mozilla/5.0 (X11; U; Linux i686; pl; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3';
// curl ma problem

// logowanie na plemiona
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.plemiona.pl/index.php?action=login&server_pl'.$serwer.'');
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,'user='.$login.'&password='.$haslo.'');
curl_setopt($ch, CURLOPT_REFERER, 'http://www.plemiona.pl/');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

/* przejscie do wybranej zakladli
curl_exec($ch);
curl_setopt($ch, CURLOPT_URL, '$zakladka');
*/

$wynik = curl_exec($ch);
curl_close($ch);
print_r($wynik[0]);

To jest kod w wersji "finalnej".
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.