phpでログインを真似するとなると、多くの人はcurl関数シリーズを真っ先に思い浮かべるでしょう。これも正しいです。原理は、Renren.com のログイン情報を取得し、curl post を通じてログイン データをアップロードするだけです。
具体的なコードは次のとおりです:
$cookie_file = dirname(__FILE__)."/renren.cookie";
$login_url = 'http://passport.renren.com/PLogin.do';
$post_fields['電子メール'] = $rconfig['ユーザー名'];
$post_fields['パスワード'] = $rconfig['rパスワード'];
$post_fields['origURL'] = 'http%3A%2F%2Fhome.renren.com%2FHome.do';
$post_fields['ドメイン'] = 'renren.com';
$ch =curl_init($login_url);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
$content =curl_exec($ch);
$info =curl_getinfo($ch);
curl_close($ch);
//var_dump($info);終了;
//ユーザーのIDと一致します
$send_url='http://www.renren.com/home';
$ch =curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
curl_exec($ch);
$info =curl_getinfo($ch);
curl_close($ch);
//$uid = "305115027";
//トークンとrtkを取得します
$send_url=$info['redirect_url'];
$ch =curl_init($send_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$tmp =curl_exec($ch);
curl_close($ch);
preg_match_all("/get_check:'(.*?)',get_check_x:'(.*?)',/is",$tmp,$arr);
preg_match_all("/'ruid':'(.*?)',/is",$tmp,$utmp);
//var_dump($utmp);終了;
$token = $arr[1][0];//1121558104
$rtk = $arr[2][0];//e9a9cb2
$uid = $utmp[1][0];
//エコー $token;終了;
//情報を公開します
$poststr['content'] = $_GPC['content'].$rconfig['tail'];
$poststr['withInfo'] = '{"wpath":[]}';
$poststr['hostid:'] = $uid;
$poststr['privacyParams'] = '{"sourceControl": 99}';
$poststr['requestToken'] = $token;
$poststr['_rtk'] = $rtk;
$poststr['チャンネル'] = "レンレン";
$head = 配列(
'リファラー:http://shell.renren.com/ajaxproxy.htm',
'X-Requested-With:XMLHttpRequest',
);
$ch =curl_init("http://shell.renren.com/{$uid}/status");
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5');
curl_setopt($ch,CURLOPT_HTTPHEADER,$head);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $poststr);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
$content =curl_exec($ch);
curl_close($ch);
//エコー $content;終了;
$data = json_decode($content,true);
if($data["コード"] == "0"){
echo "正常に公開されました!";
}その他{
エコー「クソ!!!」;
}
最終的にリリースは成功しました。もちろん、リリースする情報として、以前のデータベースも自分で作成する必要があります。データを記録するだけです。