首页 > 开发 > PHP > 正文

利用php curl实现程序登录新浪微博代码

2024-05-04 21:58:20
字体:
来源:转载
供稿:网友
  1. /**  
  2. * CURL请求  
  3. * @param String $url 请求地址  
  4. * @param Array $data 请求数据  
  5. */  
  6. function curlRequest($url,$data='',$cookieFile=''){  
  7. $ch = curl_init();  
  8. $option = array(  
  9. CURLOPT_URL => $url,  
  10. CURLOPT_HEADER =>0,  
  11. CURLOPT_RETURNTRANSFER => 1,  
  12. );  
  13. if($cookieFile){  
  14. $option[CURLOPT_COOKIEJAR] = $cookieFile;  
  15. $option[CURLOPT_COOKIEFILE] = $cookieFile;  
  16. //$option[CURLOPT_COOKIESESSION] = true;  
  17. //$option[CURLOPT_COOKIE] = 'prov=42;city=1';  
  18. }  
  19. if($data){  
  20. $option[CURLOPT_POST] = 1;  
  21. $option[CURLOPT_POSTFIELDS] = $data;  
  22. }  
  23. curl_setopt_array($ch,$option);  
  24. $response = curl_exec($ch);  
  25. if(curl_errno($ch) > 0){  
  26. throw_exception("CURL ERROR:$url ".curl_error($ch));  
  27. }  
  28. curl_close($ch);  
  29. return $response;  
  30. }  
  31. function login($username,$password){  
  32. if($username && $password){  
  33. $preLoginData = curlRequest('http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su='.base64_encode($username).'&client=ssologin.js(v1.3.16)','',self::COOKIE_FILE);  
  34. preg_match('/sinaSSOController.preloginCallBack((.*))/',$preLoginData,$preArr);  
  35. $jsonArr = json_decode($preArr[1],true);  
  36. if(is_array($jsonArr)){  
  37. $postArr = array(  
  38. 'entry' => 'weibo',  
  39. 'gateway' => 1,  
  40. 'from' => '',  
  41. 'savestate' => 7,  
  42. 'useticket' => 1,  
  43. 'ssosimplelogin' => 1,  
  44. 'su' => base64_encode(urlencode($username)),  
  45. 'service' => 'miniblog',  
  46. 'servertime' => $jsonArr['servertime'],  
  47. 'nonce' => $jsonArr['nonce'],  
  48. 'pwencode' => 'wsse',  
  49. 'sp' => sha1(sha1(sha1($password)).$jsonArr['servertime'].$jsonArr['nonce']),  
  50. 'encoding' => 'UTF-8',  
  51. 'url' => 'http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack',  
  52. 'returntype' => 'META'  
  53. );  
  54. $loginData = curlRequest('http://login.sina.com.cn/sso/login.php?client=ssologin.js(v1.3.16)',$postArr,self::COOKIE_FILE);  
  55. if($loginData){  
  56. $matchs = array();  
  57. preg_match('/replace('(.*?)')/',$loginData,$matchs);  
  58. $loginResult = curlRequest($matchs[1],'',self::COOKIE_FILE);  
  59. $loginResultArr = array();  
  60. preg_match('/feedBackUrlCallBack((.*?))/',$loginResult,$loginResultArr);  
  61. //$userInfo = json_decode($loginResultArr[1],true);  
  62. //Log::info(var_export($loginResultArr[1]));  
  63. }else{  
  64. throw_exception('Login sina fail.');  
  65. }  
  66. }else{  
  67. throw_exception($preLoginData);  
  68. }  
  69. }else{  
  70. throw_exception('Param error.');  
  71. }  

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表