Heim > Backend-Entwicklung > PHP-Tutorial > Wie simuliert Curl die Anmeldung bei einem von OAuth autorisierten Benutzercenter, um sich bei jeder darunter liegenden Unterseite anzumelden?

Wie simuliert Curl die Anmeldung bei einem von OAuth autorisierten Benutzercenter, um sich bei jeder darunter liegenden Unterseite anzumelden?

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2023-03-01 20:58:01
Original
1461 Leute haben es durchsucht

Problemübersicht:
Verwenden Sie PHP Curl, um die Anmeldung bei einer Website wie http://www.aaa.com zu simulieren, und verwenden Sie Fiddler, um das Paket zu erfassen und wie folgt zu analysieren:
1. Das Formular wird im POST-Modus gesendet. Gehen Sie zu http://www.aaa.com/dologin, hier wird ein Token generiert: xxx,
2. Der Server springt mit diesem Token zur Protokollierung in:
https://account.usercenter.com/login?token=xxx&target_url=http://www.aaa.com;
( Beachten Sie, dass der Domänenname unterschiedlich ist und https lautet. Wenn Sie außerdem die URL mit dem Token auf einen beliebigen Computer kopieren, können Sie sich normal anmelden. Es wird ungültig, nachdem die Anmeldung erfolgreich war)
3. Nach erfolgreicher Anmeldung wird die Adresse zur Ziel-URL umgeleitet: http://aaa.com

Problemanalyse:
Mein Verständnis: Es gibt einen Autorisierungsserver, der auf die URL zugreift, die über Cookies zwischen dem PC und dem Server verfügt

Stellen Sie eine Frage: Wie implementiert man diese Anmeldesimulation mit PHP Curl?

Hier ist mein Code:

<code><?php
    $cookie_file = 'E:\work\cookie.txt';
    $login_url = 'http://www.aaa.com/dologin';
    $post_fields = 'userName=aa&password=bb&service_key=cc'
    $post_fields.= '&callback_url=http%3A%2F%2Fwww.aaa.com&hostUrl=http%3A%2F%2Fwww.aaa.com';
    $ch = curl_init($login_url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
    $contents=curl_exec($ch);
    curl_close($ch);
    preg_match('/(https:\/\/account\.usercenter\.com\/tokenLogin[^\s]*)\s*/',$contents,$match);
    //var_dump($match);die; 此处匹配出携带token的url
    $ch = curl_init($match[1]);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    $result = curl_exec($ch);
    curl_close($ch);
    $url='http://www.aaa.com/1.html';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    //curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $contents = curl_exec($ch);
    curl_close($ch);
    var_dump($contents);//这里输出的页面显示没有登陆成功(这里是问题所在)
?></code>
Nach dem Login kopieren
Nach dem Login kopieren
Ich frage mich, ob diese Art der Anmeldung durch Cookies erreicht werden kann? Liebe Helden, bitte gebt mir einen Rat~~

Antwortinhalt:

Problemübersicht: Verwenden Sie PHP Curl, um die Anmeldung bei einer Website wie http://www.aaa.com zu simulieren, und verwenden Sie Fiddler, um das Paket zu erfassen und wie folgt zu analysieren:
1. Das Formular wird im POST-Modus gesendet. Gehen Sie zu http://www.aaa.com/dologin, hier wird ein Token generiert: xxx,
2. Der Server springt mit diesem Token zur Protokollierung in:

; https://account.usercenter.com/login?token=xxx&target_url=http://www.aaa.com ( Beachten Sie, dass der Domänenname unterschiedlich ist und https lautet. Wenn Sie außerdem die URL mit dem Token auf einen beliebigen Computer kopieren, können Sie sich normal anmelden. Es wird ungültig, nachdem die Anmeldung erfolgreich war)
3. Nach erfolgreicher Anmeldung wird die Adresse zur Ziel-URL umgeleitet: http://aaa.com

Problemanalyse: Mein Verständnis: Es gibt einen Autorisierungsserver, der auf die URL zugreift, die über Cookies zwischen dem PC und dem Server verfügt

Stellen Sie eine Frage:

Wie implementiert man diese Anmeldesimulation mit PHP Curl?
Hier ist mein Code:

Ich frage mich, ob diese Art der Anmeldung durch Cookies erreicht werden kann? Liebe Helden, bitte gebt mir einen Rat~~
<code><?php
    $cookie_file = 'E:\work\cookie.txt';
    $login_url = 'http://www.aaa.com/dologin';
    $post_fields = 'userName=aa&password=bb&service_key=cc'
    $post_fields.= '&callback_url=http%3A%2F%2Fwww.aaa.com&hostUrl=http%3A%2F%2Fwww.aaa.com';
    $ch = curl_init($login_url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    //curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
    $contents=curl_exec($ch);
    curl_close($ch);
    preg_match('/(https:\/\/account\.usercenter\.com\/tokenLogin[^\s]*)\s*/',$contents,$match);
    //var_dump($match);die; 此处匹配出携带token的url
    $ch = curl_init($match[1]);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    $result = curl_exec($ch);
    curl_close($ch);
    $url='http://www.aaa.com/1.html';
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_HEADER, 1);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    //curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.59 Safari/537.36 OPR/41.0.2353.46");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $contents = curl_exec($ch);
    curl_close($ch);
    var_dump($contents);//这里输出的页面显示没有登陆成功(这里是问题所在)
?></code>
Nach dem Login kopieren
Nach dem Login kopieren

Ich habe im vorherigen Code viele Male getestet, wie Cookies übertragen werden, aber es scheint, dass es nie erfolgreich mit der Cookie-Datei verknüpft wurde. Ich weiß nicht, wie ich den Code schreiben soll, um Cookies zu übertragen. Nach weiterem Debuggen stellte ich jedoch fest, dass ich mich nach dem Aufruf von http://www.aaa.com/dologin bereits bei dieser Site anmelden kann. Diese URL mit dem Token ist nur ein SSO, um mich bei einem anderen Sub anzumelden -Seiten.

Vielen Dank für Ihre Antworten~~

Natürlich kann es erreicht werden, Ihr Verständnis ist richtig. Im Cookie wird ein eindeutiger Token gespeichert, der bei jeder Übermittlung mitgeführt werden muss. Nach erfolgreicher Anmeldung wird der Token sofort ungültig.

Je nach Prozess muss es stimmen

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage