ホームページ >バックエンド開発 >PHPチュートリアル >PHP Curl は WeChat パブリック プラットフォームと Sina Weibo へのログインをシミュレートします

PHP Curl は WeChat パブリック プラットフォームと Sina Weibo へのログインをシミュレートします

WBOY
WBOYオリジナル
2016-06-23 13:17:231377ブラウズ

curl を使用する前に、curl 設定を開きます。Baidu は、curl 拡張機能を有効にする方法を示します。パスワードは md5 で暗号化されています。これはテスト済みです。ユーザーとパスワードを自分のものに変更するだけです。

次のコードは、PHP がカールを使用して WeChat パブリック プラットフォームへのログインをシミュレートする方法を紹介します。具体的なコードは次のとおりです:

<?php //模拟微信登入 $cookie_file = tempnam('./temp','cookie'); $login_url = 'https://mp.weixin.qq.com/cgi-bin/login'; $pwd = md5("********");$data = "f=json&imgcode=&pwd=$pwd&username=*****@***.com"; $ch = curl_init($login_url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_POST,1); curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false); curl_setopt($ch,CURLOPT_REFERER,'https://mp.weixin.qq.com'); curl_setopt($ch,CURLOPT_POSTFIELDS,$data); $content = curl_exec($ch); curl_close($ch); $newurl = json_decode($content,1); //var_dump($newurl);//exit;$newurl = $newurl['redirect_url']; //获取登入后页面的源码 $go_url = 'https://mp.weixin.qq.com'.$newurl; $ch = curl_init($go_url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,CURLOPT_COOKIEFILE,$cookie_file); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,0); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $content = curl_exec($ch); //var_dump(curl_error($ch)); print_r($content); curl_close($ch); ?>

PHP CURL を使用して Sina Weibo へのログインをシミュレートする

時々、いくつかの Sina Weibo データを取得します。しかし、API を使用したくなかったので、シミュレートされたログインを使用する必要がありました

Google で調べたところ、多くの人がこの問題に遭遇していることがわかりました。解決策が見つからなかったので、自分で調べてみました。理由は、Sina が同じログイン パラメーターを使用して制限しているためかもしれませんが、Web ページからログインする場合は正常です。 、CURL でログインすると、返される COOKIES は一時的なものです

したがって、ログインは成功したように見えますが、再度アクセスすると、ユーザーはまだログインしていません。 COOKIES の有効性を直接変更するだけです

以下に私自身のテストに合格した PHP コードを添付します。より良い解決策があれば、他の人にも役立つと思います。

CURLOPT_COOKIESESSION パラメータが設定されていない限り、これで十分であり、COOKIE_FILE を変更する必要はないことがわかりました

<?phpclass sina{/*一个简单的新浪微搏curl模拟登录类. 来源: http://chenall.net/post/sina_curl_login/ 使用方法:http函数是一个简单的curl封装函数,需要自己去实现,http函数原型如下:http($url,$post_data = null)返回网页内容.第一个参数$url,就是要访问的url地址,$post_data是post数据,如果为空,则代表GET访问.1.使用加密后密码登录 加密方法: sha1(sha1($pass))$sina = new sina($username,$sha1pass)2.直接使用原始密码登录$sina = new sina($username,$sha1pass,0)执行之后如果$sina->status非空,则登录成功,否则登录失败.登录成功之后,你就可以直接继续使用http函数来访问其它内容.使用 unset($sina) 会自动注销登录.*/public $status;function __construct($su,$sp,$flags = 1) {$this->status = $this->login($su,$sp,$flags);}function __destruct(){//注销登录$this->logout();}function logout(){http("http://weibo.com/logout.php");unset($this->status);}/*不需要了,只要不设置HTTP函数中不设置CURLOPT_COOKIESESSION参数就行了,要设可以设为false.function ResetCookie()//重置相关cookie{global $cookie_file;$str = file_get_contents($cookie_file);$t = time()+3600;//设置cookie有效时间一个小时$str = preg_replace("/\t0\t/", "\t".$t."\t", $str);$f = fopen($cookie_file,"w");fwrite($f,$str);fclose($f);}*/function login($su,$sp,$flags = 0){$su = urlencode(base64_encode($su));$data = http("http://login.sina.com.cn/sso/prelogin.php?entry=miniblog&client=ssologin.js&user=".$su);if (empty($data))return null;//$data = substr($data,35,-1);$data = json_decode($data);if ($data->retcode != 0)return null;if ($flags == 0)$sp = sha1(sha1($sp));$sp .= strval($data->servertime).$data->nonce;$sp = sha1($sp);$data = "url=http%3A%2F%2Fweibo.com%2Fajaxlogin.php%3F&returntype=META&ssosimplelogin=1&su=".$su.'&service=miniblog&servertime='.$data->servertime."&nonce=".$data->nonce.'&pwencode=wsse&sp='.$sp;$data = http("http://login.sina.com.cn/sso/login.php?client=ssologin.js",$data);//$this->ResetCookie();if (preg_match("/location\.replace\('(.*)'\)/",$data,$url)){$data = http($url[1]);//$this->ResetCookie();$data = json_decode(substr($data,1,-2));if ($data->result == true)return $data->userinfo;}return null;}}?>

上記のコンテンツでは、WeChat パブリック プラットフォームと Sina Weibo への PHP Curl のシミュレートされたログインを紹介しています。この記事が皆さんのお役に立てれば幸いです。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。