创意数字品牌全案服务

BRANDING DESIGN AGENCY.

品牌咨询电话

0571-89937222
curl 选项属性配置说明
05-22 阅读:1125

这几天工作有大量用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到此结束,后边我可能会写更多关于微信公众平台的东西。
附:本文来源: csdn


选项

可选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

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


本文关键词:选项 属性 配置 说明 curl
返回