この記事の例では、PHP が Curl を使用して Renren へのログインを模倣し、更新を公開する方法を説明します。参考のためにみんなで共有してください。具体的な実装方法は以下の通りです
PHP でログインを模倣するというと、多くの人はすぐにcurl 関数シリーズを思い浮かべるでしょう。その通りです。この例でも、curl を使用してログインを模倣し、動的パブリッシングを実行するだけです。 Renren のログイン情報を入力し、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 "正常に公開されました!";
}その他{
エコー「クソ!!!」;
}
最終的にリリースは成功しました。もちろん、リリースする情報として、以前のデータベースも自分で作成する必要があります。データを記録するだけです。
この記事で説明した内容が皆様の PHP プログラミング設計に役立つことを願っています。
リファラーとユーザーエージェントがブラウザの値をシミュレートできるかどうかなど、シミュレートされていない他の http ヘッダーがあるかどうかを確認できます。 完全なリクエストは次のようになります。
GET /home/pack/data/content id? =31,2399,13,30&asyn=1&t=0.03439752989200834&_req_seqid=0xa982225f0637c78a HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Referer: www.baidu.com/
x-re requested -with: XMLHttpRequest
Accept-Encoding: gzip、deflate
User-Agent: Mozilla/4.0 (互換性; MSIE 8.0; Windows NT 5.1; Trident/4.0; BTRS123401; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; MS-RTC LM 8)
ホスト: www.baidu.com
接続: キープアライブ
Cookie: XCXXXXX
$post_fields = 'cktime=31536000&step=2&pwuser=Account&pwpwd=Password'; アカウントのパスワードを自分のものに変更してみてください。試してみましたが、うまくいきました