Ich arbeitete mit HttpFox und habe die Werte (URL und Post-Daten) mit denen, die mein Code generiert hat, verglichen. Sie sind völlig gleich, aber ich sehe immer die Meldung "Login fehlgeschlagen" auf der Webseite. Ich habe keine Ahnung, was das Problem sein könnte.PHP cURL Authentifizierung Problem
Code:
require 'domparser_1_5/simple_html_dom.php';
$username = "username";
$password = "password";
function login($url,$data){
$fp = fopen("cookie.txt", "w");
fclose($fp);
$login = curl_init();
curl_setopt($login, CURLOPT_URL, $url);
curl_setopt($login, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
curl_setopt($login, CURLOPT_TIMEOUT, 40000);
curl_setopt($login, CURLOPT_RETURNTRANSFER, true);
curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($login, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($login, CURLOPT_POST, true);
curl_setopt($login, CURLOPT_POSTFIELDS, $data);
ob_start();
$result = curl_exec($login);
ob_end_clean();
curl_close($login);
unset($login);
return $result;
}
function generate_pass($user, $password, $token) {
if ($password) {
$enc_pass = md5($password);
$pass = $user.':'.$enc_pass.':'.$token;
return md5($pass);
}
}
function get_token() {
$html = file_get_html('https://www.foo.com/');
$token = "";
foreach($html->find('input') as $element) {
if($element->name == "token") {
$token = $element->value;
}
}
if (!$token) {
die('No token found');
}
return $token;
}
$token = get_token();
echo login("https://www.foo.com/login/start.html", "user=".$username."&password=".$password."&submit=Anmelden&logintype=login&pid=4%2C93%2C1828&pass=".generate_pass($username, $password, $token)."&redirect_url=login%2Fstart.html&tx_felogin_pi1%5Bnoredirect%5D=0&token=".$token."");
Versuchen Sie, Guzzle lib zu verwenden, es ist benutzerfreundlicher. https://github.com/guzzle/guzzle – vanadium23
Oder Sie können Postman Plugin hinzufügen (https://chrome.google.com/webstore/detail/postman-rest-client/fdmmgilgnpjigdojojpjoooidkmcomcm), senden Sie Ihre Anfrage und sehen, ob es wirklich funktioniert ... –
Warum hast du Code nach 'return curl_exec ($ login);'? Die Funktion endet, wenn Sie 'return' verwenden. – Barmar