PHP Curl模拟登录微信公众平台、新浪微博实例代码


Posted in PHP onJanuary 28, 2016

使用curl之前先打开curl配置,具体方式百度一下就知道,开启curl扩展。密码用md5加密,这是经过测试成功的,把用户跟密码改成你的就行了。

下面一段代码给大家介绍php使用curl模拟登录微信公众平台,具体代码如下所示:

<?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 模拟登录新浪微博

有时候我们获取一些新浪微博的数据,但又不想使用API,只好使用模拟登录了.

发现以前可以使用的CURL模拟登录代码失效了,Google一下,发现有很多人碰到这个问题.但是没有找到解决方法,所以就自己研究了一下,发现了原因.

可能是因为新浪限制了不允许模拟登录,同样的登录参数,用网页登录一切正常,用CURL登录,返回的COOKIES竟然是临时的.

所以看起来是登录成功了,并且获取到了用户信息,但是再次访问还是未登录状态.我的解决方法比较简单,直接修改COOKIES的时效这样就行了.

附上我自己测试通过的PHP代码如下,希望有对有同样问题的朋友有用,如果你有更好的方案欢迎分享一下.

发现只要不设置CURLOPT_COOKIESESSION参数就行了,不需要修改COOKIE_FILE.

<?php
class 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;
}
}
?>

以上内容给大家介绍了PHP Curl模拟登录微信公众平台、新浪微博实例代码,希望本文所述对大家有所帮助。

PHP 相关文章推荐
PHP的FTP学习(一)
Oct 09 PHP
PHP4和PHP5共存于一系统
Nov 17 PHP
PHP insert语法详解
Jun 07 PHP
PHP批量生成缩略图的代码
Jul 19 PHP
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
DW中链接mysql数据库时,建立字符集中文出现乱码的解决方法
Mar 27 PHP
浅析php中jsonp的跨域实例
Jun 21 PHP
PHP JS Ip地址及域名格式检测代码
Sep 27 PHP
thinkphp四种url访问方式详解
Nov 28 PHP
php判断linux下程序问题实例
Jul 09 PHP
PHP利用正则表达式将相对路径转成绝对路径的方法示例
Feb 28 PHP
PHP实现15位身份证号转18位的方法分析
Oct 16 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
Jan 27 #PHP
PHP文件上传之多文件上传的实现思路
Jan 27 #PHP
PHP内核学习教程之php opcode内核实现
Jan 27 #PHP
PHP编程入门的基本语法知识点总结
Jan 26 #PHP
PHP数组游标实现对数组的各种操作详解
Jan 26 #PHP
PHP面向对象程序设计实例分析
Jan 26 #PHP
PHP类的声明与实例化及构造方法与析构方法详解
Jan 26 #PHP
You might like
一漂亮的PHP图片验证码实例
2014/03/21 PHP
一个简洁实用的PHP缓存类完整实例
2014/07/26 PHP
php中实现xml与mysql数据相互转换的方法
2014/12/25 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
php ZipArchive实现多文件打包下载实例
2019/10/31 PHP
简单的JS多重继承示例
2008/03/13 Javascript
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
小型js框架veryide.librar源代码
2009/03/05 Javascript
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
ajax 同步请求和异步请求的差异分析
2011/07/04 Javascript
JS和函数式语言的三特性
2014/03/05 Javascript
生成二维码方法汇总
2014/12/26 Javascript
jquery中animate的stop()方法作用实例分析
2015/01/30 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
angular分页指令操作
2017/01/09 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
angularjs中回车键触发某一事件的方法
2017/04/24 Javascript
微信小程序 弹窗输入组件的实现解析
2019/08/12 Javascript
react 不用插件实现数字滚动的效果示例
2020/04/14 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
打印出python 当前全局变量和入口参数的所有属性
2009/07/01 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python多线程实现TCP服务端
2019/09/03 Python
python3爬虫中异步协程的用法
2020/07/10 Python
携程旅行网:中国领先的在线旅行服务公司
2017/02/17 全球购物
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
zooplus意大利:在线宠物商店
2019/08/07 全球购物
2014年学习雷锋活动总结
2014/03/01 职场文书
创先争优演讲稿
2014/09/15 职场文书
教师党的群众路线对照检查材料
2014/09/24 职场文书
超市店长竞聘书
2015/09/15 职场文书
MySQL的安装与配置详细教程
2021/06/26 MySQL
Win11电脑显示本地时间与服务器时间不一致怎么解决?
2022/04/05 数码科技
苹果可能正在打击不进行更新的 App
2022/04/24 数码科技