Heim  >  Artikel  >  Backend-Entwicklung  >  微信公众平台之CURL应用_PHP教程

微信公众平台之CURL应用_PHP教程

WBOY
WBOYOriginal
2016-07-13 10:48:461179Durchsuche

本文章来给各位同学介绍一下关于微信公众平台之CURL应用实例,如果你碰到此类问题不防进入参考一下吧。

这几天工作有大量用curl,curl就是模拟浏览器来传输数据,他支持很多的协议HTPP,HTTPS,FTP….等等很多协议,在做采集和模拟用户来执行一些操作的时候非常有用的。
使用CURL主要是四个步骤:
1、初始化URL
2、设置请求的一些参数(COOKIE,HEAD…)
3、执行请求
4、关闭资源
先说一个简单的采集,一般在获取一个网页的内容的时候我们最方便就是使用file_get_contents()函数来获取,现在我们通过CURL来抓取一个网页的内容

 代码如下 复制代码

$ch = curl_init();//初始化一个资源
       curl_setopt($ch,CURLOPT_URL,”http://www.mapenggang.com”);//设置我们要获取的网页
       curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//关闭直接输出
       $string= curl_exec($ch);
       curl_close($ch);


注:重点在于curl_setopt()这个函数的第二个参数(下面会有一些常用的资料)
这样我们就可以得到这个网页的内容,如果只有CURL来做些这就大材小用了,CURL其实可以用来做更加神奇的东西。
最近刚到一家创业型的新公司(尼玛,选择这个公司真的是比较纠结,因为手里有好几个offer,但是这边给的工资待遇很低,因为创业型公司吗。我也不知道为什么会选择这家公司,反正是为了选择这家公司,朋友都很不解,其实我也不知道为什么会选择这家,其他公司的工资大概是这家公司的两倍,希望这次没有选错,不然.想死的心都会有,说了这么多废话),做的是现在比较火的微信公众平台的开发,因为微信现在开放的接口特别的少,所以通过接口得到的东西特别的少(尼玛,小马哥你什么时候多放的借口啊!),但是官方提供的操作平台有很多接口中没有数据所以,我们需要去自己去找一些数据了,好吧,主角上场CURL。

首先公众平台是要登录才能访问,那我就先登录吧(废话),首先需要抓包分析一下正常提交数据,这里我就不截图了(博客在bae平台上,编辑器还没有时间去理他,不太好使),通过抓包分析得出,微信的公众平台使用的是ajax登录,且密码在提交之前已经进行了md5加密(好像正规应该叫md5散列把,而且标准的MD5散列应该是128位的,不过为了方便存储和传输就现在最多的就是32和16位了,刚了解,惭愧),还有很重要一点就是,微信公众平台采用的是https协议进行登录的。最爽的一点就是不用验证码,sogay。不然老费劲了,分析到这就可以了。Come on !!!!

 代码如下 复制代码


$password = md5($password);//因为刚才抓包发现是md5加密过的,所以这里我们提前把密码加密号


$post = "username={$username}&pwd={$password}&f=json&imgcode=";
$loginUrl = "https://mp.weixin.qq.com/cgi-bin/login?";//微信登录的地址

//这里的头信息都是必须要设置的,这些你都可以在刚才抓包的时候获取到


$headerArray = array(
'Accept:application/json, text/javascript, */*',
'Content-Type:application/x-www-form-urlencoded',
'Referer:https://mp.weixin.qq.com/'
);

$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$loginUrl);
// 对认证证书来源的检查,0表示阻止对证书的合法性的检查。
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//关闭直接输出
curl_setopt($ch,CURLOPT_POST,1);//使用post提交数据
curl_setopt($ch,CURLOPT_POSTFIELDS,$post);//设置 post提交的数据
curl_setopt($ch,CURLOPT_USERAGENT,'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36');//设置用户代理
curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);//设置头信息

curl_setopt($ch,CURLOPT_COOKIEJAR,$cookie_file);//设置cookie的保存目录,这里很重要,你懂的(cookie你都不存,你以为你是麻花腾啊!)
$loginData = curl_exec($ch);//这里会返回token,需要处理一下。

//获取到token的值

$loginData = json_decode($loginData,true);

$token = explode("=",$loginData['ErrMsg']);

$token = array_pop($token);

echo "登录微信系统成功
";


curl_close($ch);


 

上边就是登录微信公众平台的代码了,经测试十分好用+_+。
这几天微信公众平台接触的比较多,这个只是万里长征的第一步,后边我会分享一下如何将微信的fakeid 和 openid对应起来,实现自己可以自己的平台上显示用户的完整信息(据我了解,网上现在对于如何fakeid 和 openid对应来没有很好的解决方案,通过好几天的奋斗现在已经可以对应起来的,比较麻烦,且已有的用户是无法对起来的(其实这个理论上是可以的,但是没有做出来不乱说,其实是没有时间去做这个,有机会可以尝试,不过实现需要已有系统的支持,也就是你现在的系统必须记录了和用回的聊天记录(我说什么了?我什么都没有说!)))。
体育老师啊,你说你不好好带你的体育课,没有跑来教我们语文,这几天接触不少能写的东西太多了,所以想到那就写到那了,有点乱,几天主要用的是CURL,所以今天说点CURL的实例,正好就把手头的登录微信公众平台的东西写上来了,CURL到此结束,后边我可能会写更多关于微信公众平台的东西。
附:

选项

可选value

备注

CURLOPT_AUTOREFERER

当根据Location:重定向时,自动设置header中的Referer:信息。

 

CURLOPT_BINARYTRANSFER

在启用CURLOPT_RETURNTRANSFER的时候,返回原生的(Raw)输出。

 

CURLOPT_COOKIESESSION

启用时curl会仅仅传递一个session cookie,忽略其他的cookie,默认状况下cURL会将所有的cookie返回给服务端。session cookie是指那些用来判断服务器端的session是否有效而存在的cookie

 

CURLOPT_CRLF

启用时将Unix的换行符转换成回车换行符。

 

CURLOPT_DNS_USE_GLOBAL_CACHE

启用时会启用一个全局的DNS缓存,此项为线程安全的,并且默认启用。

 

CURLOPT_FAILONERROR

显示HTTP状态码,默认行为是忽略编号小于等于400HTTP信息。

 

CURLOPT_FILETIME

启用时会尝试修改远程文档中的信息。结果信息会通过curl_getinfo()函数的CURLINFO_FILETIME选项返回。 curl_getinfo().

 

CURLOPT_FOLLOWLOCATION

启用时会将服务器服务器返回的"Location: "放在header中递归的返回给服务器,使用CURLOPT_MAXREDIRS可以限定递归返回的数量。

 

CURLOPT_FORBID_REUSE

在完成交互以后强迫断开连接,不能重用。

 

CURLOPT_FRESH_CONNECT

强制获取一个新的连接,替代缓存中的连接。

 

CURLOPT_FTP_USE_EPRT

启用时当FTP下载时,使用EPRT (LPRT)命令。设置为FALSE时禁用EPRTLPRT,使用PORT命令 only.

 

CURLOPT_FTP_USE_EPSV

启用时,在FTP传输过程中回复到PASV模式前首先尝试EPSV命令。设置为FALSE时禁用EPSV命令。

 

CURLOPT_FTPAPPEND

启用时追加写入文件而不是覆盖它。

 

CURLOPT_FTPASCII

CURLOPT_TRANSFERTEXT的别名。

 

CURLOPT_FTPLISTONLY

启用时只列出FTP目录的名字。

 

CURLOPT_HEADER

启用时会将头文件的信息作为数据流输出。

 

CURLINFO_HEADER_OUT

启用时追踪句柄的请求字符串。

PHP 5.1.3 开始可用。CURLINFO_前缀是故意的(intentional)

CURLOPT_HTTPGET

启用时会设置HTTPmethodGET,因为GET是默认是,所以只在被修改的情况下使用。

 

CURLOPT_HTTPPROXYTUNNEL

启用时会通过HTTP代理来传输。

 

CURLOPT_MUTE

启用时将cURL函数中所有修改过的参数恢复默认值。

 

CURLOPT_NETRC

在连接建立以后,访问~/.netrc文件获取用户名和密码信息连接远程站点。

 

CURLOPT_NOBODY

启用时将不对HTML中的BODY部分进行输出。

 

CURLOPT_NOPROGRESS

启用时关闭curl传输的进度条,此项的默认设置为启用。

Note:PHP自动地设置这个选项为TRUE,这个选项仅仅应当在以调试为目的时被改变。

 

 

CURLOPT_NOSIGNAL

启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认启用。

cURL 7.10时被加入。

CURLOPT_POST

启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。

 

CURLOPT_PUT

启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILECURLOPT_INFILESIZE

 

CURLOPT_RETURNTRANSFER

curl_exec()获取的信息以文件流的形式返回,而不是直接输出。

 

CURLOPT_SSL_VERIFYPEER

禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE

cURL 7.10开始默认为TRUE。从cURL 7.10开始默认绑定安装。

CURLOPT_TRANSFERTEXT

启用后对FTP传输使用ASCII模式。对于LDAP,它检索纯文本信息而非HTML。在Windows系统上,系统不会把STDOUT设置成binary模式。

 

CURLOPT_UNRESTRICTED_AUTH

在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息,即使域名已发生改变。

 

CURLOPT_UPLOAD

启用后允许文件上传。

 

CURLOPT_VERBOSE

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn