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数组的概述及分类与声明代码演示
Feb 26 PHP
ThinkPHP3.2.2的插件控制器功能简述
Jul 09 PHP
phpstorm配置Xdebug进行调试PHP教程
Dec 01 PHP
apache中为php 设置虚拟目录
Dec 17 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
Dec 24 PHP
WordPress过滤垃圾评论的几种主要方法小结
Jul 11 PHP
php获取开始与结束日期之间所有日期的方法
Nov 29 PHP
php简单读取.vcf格式文件的方法示例
Sep 02 PHP
PHP Cli 模式设置进程名称的方法
Jun 12 PHP
Laravel 前端资源配置教程
Oct 18 PHP
详解no input file specified 三种解决方法
Nov 29 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
Terran兵种介绍
2020/03/14 星际争霸
PHP 和 MySQL 基础教程(三)
2006/10/09 PHP
PHP扩展Memcache分布式部署方案
2015/12/06 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
PHP连接MySQL数据库三种实现方法
2020/12/10 PHP
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
使用jquery解析XML的方法
2014/09/05 Javascript
JQuery中属性过滤选择器用法实例分析
2015/05/18 Javascript
JavaScript关于提高网站性能的几点建议(一)
2016/07/24 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
JS判断浏览器类型与操作系统的方法分析
2020/04/30 Javascript
[09:47]2018DOTA2亚洲邀请赛4.5SOLO赛 No[o]ne vs Sumail
2018/04/06 DOTA
Python2.5/2.6实用教程 入门基础篇
2009/11/29 Python
用Python写的图片蜘蛛人代码
2012/08/27 Python
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
使用python获取电脑的磁盘信息方法
2018/11/01 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
html5通过postMessage进行跨域通信的方法
2017/12/04 HTML / CSS
PatPat德国:妈妈的每日优惠
2019/10/02 全球购物
某公司Java工程师面试题笔试题
2016/03/27 面试题
一些网络技术方面的面试题
2014/05/01 面试题
网络技术专业求职信
2014/02/18 职场文书
公司委托书格式范文
2014/04/04 职场文书
小摄影师教学反思
2014/04/27 职场文书
2014客服代表实习自我鉴定
2014/09/18 职场文书
民事和解协议书格式
2014/11/29 职场文书
领导欢迎词致辞
2015/01/23 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
2015年艾滋病防治工作总结
2015/05/22 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS