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 相关文章推荐
第十四节--命名空间
Nov 16 PHP
Ajax PHP简单入门教程代码
Apr 25 PHP
php中去除所有js,html,css代码
Oct 12 PHP
php array_filter除去数组中的空字符元素
Jun 21 PHP
PHP中的正则表达式函数介绍
Feb 27 PHP
解析左右值无限分类的实现算法
Jun 20 PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
php读取和保存base64编码的图片内容
Apr 22 PHP
PHP重置数组为连续数字索引的几种方式总结
Mar 12 PHP
PHP实现时间日期友好显示实现代码
Sep 08 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 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
PHP4在Windows2000下的安装
2006/10/09 PHP
隐性调用php程序的方法
2009/03/09 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
php中替换字符串函数strtr()和str_repalce()的用法与区别
2016/11/25 PHP
Mootools 1.2教程(3) 数组使用简介
2009/09/14 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
AngualrJS中每次$http请求时的一个遮罩层Directive
2016/01/26 Javascript
浅析JS动态创建元素【两种方法】
2016/04/20 Javascript
Javascript中级语法快速入手
2016/07/30 Javascript
jquery过滤特殊字符',防sql注入的实现方法
2016/08/17 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
JS正则匹配中文的方法示例
2017/01/06 Javascript
JavaScript数据结构之二叉树的查找算法示例
2017/04/13 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
Python实现矩阵转置的方法分析
2017/11/24 Python
单链表反转python实现代码示例
2018/02/08 Python
python3将视频流保存为本地视频文件
2018/06/20 Python
python 拼接文件路径的方法
2018/10/23 Python
Python 中使用 PyMySQL模块操作数据库的方法
2019/11/10 Python
Python partial函数原理及用法解析
2019/12/11 Python
利用Tensorflow构建和训练自己的CNN来做简单的验证码识别方式
2020/01/20 Python
中外合拍动画首获奥斯卡提名,“上海出品”《飞奔去月球》能否拿下最终大奖?
2021/03/16 国漫
请解释接口的显式实现有什么意义
2012/05/26 面试题
在浏览器端如何得到服务器端响应的XML数据
2012/11/24 面试题
学生会竞选演讲稿怎么写
2014/08/26 职场文书
信用卡工资证明格式
2014/09/13 职场文书
田径运动会通讯稿
2014/09/13 职场文书
创先争优宣传标语
2014/10/08 职场文书
上班迟到检讨书范文300字
2014/11/02 职场文书
使用Springboot实现健身房管理系统
2021/07/01 Java/Android
PHP正则表达式之RCEService回溯
2022/04/11 PHP
Docker与K8s关系介绍不会Docker也可以使用K8s
2022/06/25 Servers