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 相关文章推荐
使用cookie实现统计访问者登陆次数
Jun 08 PHP
php_screw 1.5:php加密: 安装与使用详解
Jun 20 PHP
php中让上传的文件大小在上传前就受限制的两种解决方法
Jun 24 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
php实现随机显示图片方法汇总
May 21 PHP
使用PHP生成二维码的方法汇总
Jul 22 PHP
Laravel 5.3 学习笔记之 安装
Aug 28 PHP
Yii框架中sphinx索引配置方法解析
Oct 18 PHP
php数组指针操作详解
Feb 14 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
php中文语义分析实现方法示例
Sep 28 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 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
adodb与adodb_lite之比较
2006/12/31 PHP
PHP 自定义错误处理函数trigger_error()
2013/03/26 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
PHP实现QQ登录的开原理和实现过程
2018/02/04 PHP
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
获得Javascript对象属性个数的示例代码
2013/11/21 Javascript
讲解JavaScript中for...in语句的使用方法
2015/06/03 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
PhantomJS快速入门教程(服务器端的 JavaScript API 的 WebKit)
2015/08/06 Javascript
JS根据key值获取URL中的参数值及把URL的参数转换成json对象
2015/08/26 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
Node.js中使用socket创建私聊和公聊聊天室
2015/11/19 Javascript
javascript html5实现表单验证
2016/03/01 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
Vue方法与事件处理器详解
2016/12/01 Javascript
nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
2016/12/30 NodeJs
js自制图片放大镜功能
2017/01/24 Javascript
浅谈vue.js中v-for循环渲染
2017/07/26 Javascript
BootStrap中的模态框(modal,弹出层)功能示例代码
2018/11/02 Javascript
浅谈ng-zorro使用心得
2018/12/03 Javascript
javascript实现简易聊天室
2019/07/12 Javascript
angularjs请求数据的方法示例
2019/08/06 Javascript
JS操作字符串转数字的常见方法示例
2019/10/29 Javascript
用Python编写web API的教程
2015/04/30 Python
python 用for循环实现1~n求和的实例
2019/02/01 Python
使用pickle存储数据dump 和 load实例讲解
2019/12/30 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
女子锻炼服装和瑜伽服装:Splits59
2019/03/04 全球购物
英国的潮牌鞋履服饰商店:size?
2019/03/26 全球购物
女性时尚网购:Chic Me
2019/07/30 全球购物
J2SDK1.5与J2SDK5.0有什么区别
2012/09/19 面试题
2014城乡环境综合治理工作总结
2014/12/19 职场文书
学生会辞职信
2015/03/02 职场文书
数学复习课教学反思
2016/02/18 职场文书
Python Flask请求扩展与中间件相关知识总结
2021/06/11 Python