Autor Zpráva
bach
Profil
Dobrý den, potřeboval bych radu, jak bych mohl číst údaje ze stránky, na kterou se však musím přihlásit jménem a heslem na web formuláři.
Konkrétně mi jde o tuto stránku www.nibeuplink.com/System/27294/Status/Overview
Děkuji za radu.
MilanKarkulka
Profil
PHP + CURL

Kopíruji příklad ze PHP a CURL

$ch = curl_init($url);
 
//POKUD CHCES VRATIT INFO HLAVICKU
curl_setopt ($ch, CURLOPT_HEADER, 0);
 
//NASTAVIS ZE CHCES ODESLAT DATA
curl_setopt($ch,CURLOPT_POST,1);
 
//VLOZIS JAKE DATA SE ODESILAJI METODOU POST
$var = "jmeno=xxx&heslo=xxx";
curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
 
//POKUD CHCES PRACOVAT S VYSLEDNOU STRANKU NASTAV NA 1
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
//DO PROMENE NACTES VYSLEDNOU STRANKU A UKONCIS CURL
$vystup = curl_exec ($ch);
curl_close ($ch);
 
//DALE UZ PRACUJES POUZE S PROMENOU
echo $vystup;
bach
Profil
MilanKarkulka:
Asi to bude složitější , našel jsem něco, ale nefunguje to, hlásí mi to chybu serveru i ksyž vyplním správně mail a heslo - včem by ještě mohl být problém?

$debug = false; 

// Create temp file to store cookies 
$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

// URL to login page 
$url = "https://www.nibeuplink.com/LogIn"; 

// Get Login page and its cookies and save cookies in the temp file 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); // Stores cookies in the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 

// Now you have the cookie, you can POST login values 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 2); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "Email=".$_GET['email']."&Password=".$_GET['pass']); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); // Uses cookies from the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Tells cURL to follow redirects 
$output = curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL, "https://www.nibeuplink.com/System/27294/Status/ServiceInfo"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_POST, 0); 
$result = curl_exec($ch); 
MilanKarkulka
Profil
Jak chybu to hlásí?
bach
Profil
MilanKarkulka:
Ani to už chybu nehlásí, zkrátil jsem to , ale zase to nepřebírá asi heslo viz níže:

http://i.kratochvilovi.net/tk/nibe3.php

nyní tam posílám toto , ale evidentně se to nepřihlásí nebo to ještě něco chce :
<? 
// to add additional debug output to the resulting page: 
$debug = false; 

// Create temp file to store cookies 
$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

// URL to login page 
$url = "https://www.nibeuplink.com/LogIn"; 

// Get Login page and its cookies and save cookies in the temp file 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); // Stores cookies in the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 

// Now you have the cookie, you can POST login values 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 2); 
curl_setopt($ch, CURLOPT_POSTFIELDS, "Email=".$_GET['email']."&Password=".$_GET['pass']); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); // Uses cookies from the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Tells cURL to follow redirects 
$output = curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL, "https://www.nibeuplink.com/System/27294/Status/ServiceInfo"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_POST, 0); 
$result = curl_exec($ch); 
 

echo $result;
?>
rafej
Profil
Pravděpodobně předáváš parametry bez správného zakódování pro URL. Zkus tohle:

$data = array(
      'Email'=>$_GET['email'],
      'Password'=>$_GET['pass']
);

$post_query = http_build_query($data) . "\n";

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));  //volitelně, vyzkoušej
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_query);

Opravdu názvy parametrů Email a Password začínají velkým písmenem? Na velikosti písmen záleží, bacha na to.

Pokud to stále nepůjde, hledej problém pravděpodobně u cookies.
bach
Profil
rafej:
hodnoty parametrů Email a Password by měly být správné dle zdroje stránky:

<label for="Email">E-mail</label><br />
          <input autocomplete="off" class="LoginTextbox input_trim" data-val="true" data-val-regex="Neplatný e-mail" data-val-regex-pattern="^[\S]+@[\S]+\.[\w]{2,}$" data-val-required="Vyžaduje se E-mail" id="Email" name="Email" tabindex="1" type="email" value="" />
        </div>
        <div style="width: 225px; margin: 0;">
          <label for="Password">Heslo</label> (<a href="/ResetPassword">Ztracené heslo</a>)<br />
          <input autocomplete="off" class="LoginTextbox" data-val="true" data-val-required="Vyžaduje se Heslo" id="Password" name="Password" tabindex="2" type="password" />


stále to dělá nějaké problémy, není to vyplněno:
i.kratochvilovi.net/tk/nibe3.php

nyní to mám takto a nevím jak dál:


<? 
// to add additional debug output to the resulting page: 
$debug = false; 

// Create temp file to store cookies 
$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 

// URL to login page 
$url = "https://www.nibeuplink.com/LogIn"; 

// Get Login page and its cookies and save cookies in the temp file 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Accepts all CAs 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile); // Stores cookies in the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 


// Now you have the cookie, you can POST login values 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_POST, 2); 


$data = array(
      'Email'=>$_GET['mail'],
      'Password'=>$_GET['heslo']
);
 
$post_query = http_build_query($data) . "\n";
 
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));  //volitelně, vyzkoušej
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_query);
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); // Uses cookies from the temp file 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Tells cURL to follow redirects 
$output = curl_exec($ch); 

curl_setopt($ch, CURLOPT_URL, "https://www.nibeuplink.com/System/27294/Status/ServiceInfo"); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile); 
curl_setopt($ch, CURLOPT_POST, 0); 
$result = curl_exec($ch); 
 
//DALE UZ PRACUJES POUZE S PROMENOU
echo $result;
?>
rafej
Profil
bach:
Na řádku 25 (dle předchozí ukázky) máš pravděpodobně překlep, který způsobuje, že se to neodesílá. Před koncovou závorkou by měla být 1.

Správně:
curl_setopt($ch, CURLOPT_POST, 1); 
bach
Profil
rafej:
Situace stejná - stále je to prázdné.
bach
Profil
rafej:
Nakonec jsem to udělal takto a jede to:

<? 

$debug = false; 

// Create temp file to store cookies 
$ckfile = tempnam ("/tmp", "CURLCOOKIE"); 


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.nibeuplink.com/LogIn');
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.107 Chrome/32.0.1700.107 Safari/537.36');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, "Email=mailt&Password=heslo");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_COOKIESESSION, true);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);  
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);  
$answer = curl_exec($ch);
if (curl_error($ch)) {
    echo curl_error($ch);
}



curl_setopt($ch, CURLOPT_URL, 'https://www.nibeuplink.com/System/27294/Status/ServiceInfo');
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, "");
$answer = curl_exec($ch);
if (curl_error($ch)) {
    echo curl_error($ch);
}
echo $answer;
?>

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: