龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

p你看到QQ空间那个朋友好久没有联系了么

时间:2014-07-22 14:49来源: 作者: 点击:
分享到:
下午看到空间开始流行一个,朋友好久联系了吧!联系我吧!谁在自己的空间看到,图片上就显示的谁的QQ和昵称!这个是怎么做的呢?我这里就写了一个小demo。获取QQ昵称是需要访问一
下午看到空间开始流行一个,朋友好久联系了吧!联系我吧!谁在自己的空间看到,图片上就显示的谁的QQ和昵称!这个是怎么做的呢?我这里就写了一个小demo。获取QQ昵称是需要访问一个网页的,我这里有原来的类!就直接用了,获取方式有很多!不过说直接上代码!
<?php
$ment =  $_SERVER["HTTP_REFERER"];
preg_match("#[0-9]{5,11}#",$ment,$rr);
$r=$rr[0];
include_once("Curl.class.php");
$curl=new Curl();
$webtext=$curl->get('http://redstones.sinaapp.com/apis/qqinfo-service.php?qq='.$r);
preg_match('#&quot;nickname&quot;:&quot;(.*?)&quot;#',$webtext,$rr);
$rrr=$rr[1];

header("Content-type:image/png");
$im=imagecreatefromjpeg("1.jpg");
$black = ImageColorAllocate($im, 56,73,136);
$fnt="shenfenzheng.TTF";
imagettftext($im,26,0,110,100,$black,"shenfenzheng.TTF",$rrr);
imagettftext($im,26,0,100,180,$black,"shenfenzheng.TTF",$r);
imagejpeg($im);
imagedestroy($im);
?>

2. [文件] Curl.class.php ~ 9KB     下载(165)     跳至 [1] [2] [全屏预览]

<?php

 class Curl{
 
 //CURL句柄
 private $ch = null;
 //CURL执行前后所设置或服务器端返回的信息
 private $info = array();
 //CURL SETOPT 信息
 private $setopt = array(
 //访问的端口,http默认是 80
 'port'=>80,
 //客户端 USERAGENT,如:"Mozilla/4.0",为空则使用用户的浏览器
 'userAgent'=>'',
 //连接超时时间
 'timeOut'=>30,
 //是否使用 COOKIE 建议打开,因为一般网站都会用到
 'useCookie'=>true,
 //是否支持SSL
 'ssl'=>false,
 //客户端是否支持 gzip压缩
 'gzip'=>true,
 
 //是否使用代理
 'proxy'=>false,
 //代理类型,可选择 HTTP 或 SOCKS5
 'proxyType'=>'HTTP',
 //代理的主机地址,如果是 HTTP 方式则要写成URL形式如:"http://www.proxy.com"
 //SOCKS5 方式则直接写主机域名为IP的形式,如:"192.168.1.1"
 'proxyHost'=>'http://www.proxy.com',
 //代理主机的端口
 'proxyPort'=>1234,
 //代理是否要身份认证(HTTP方式时)
 'proxyAuth'=>false,
 //认证的方式.可选择 BASIC 或 NTLM 方式
 'proxyAuthType'=>'BASIC',
 //认证的用户名和密码
 'proxyAuthUser'=>'user',
 'proxyAuthPwd'=>'password',
 );
 
 /**
 * 构造函数
 *
 * @param array $setopt :请参考 private $setopt 来设置
 */
 public function __construct($setopt=array())
 {
 //合并用户的设置和系统的默认设置
 $this->setopt = array_merge($this->setopt,$setopt);
 //如果没有安装CURL则终止程序
 function_exists('curl_init') || die('CURL Library Not Loaded');
 //初始化
 $this->ch = curl_init();
 //设置CURL连接的端口
 curl_setopt($this->ch, CURLOPT_PORT, $this->setopt['port']);
 //使用代理
 if($this->setopt['proxy']){
 $proxyType = $this->setopt['proxyType']=='HTTP' ? CURLPROXY_HTTP : CURLPROXY_SOCKS5;
 curl_setopt($this->ch, CURLOPT_PROXYTYPE, $proxyType);
 curl_setopt($this->ch, CURLOPT_PROXY, $this->setopt['proxyHost']);
 curl_setopt($this->ch, CURLOPT_PROXYPORT, $this->setopt['proxyPort']);
 //代理要认证
 if($this->setopt['proxyAuth']){
 $proxyAuthType = $this->setopt['proxyAuthType']=='BASIC' ? CURLAUTH_BASIC : CURLAUTH_NTLM;
 curl_setopt($this->ch, CURLOPT_PROXYAUTH, $proxyAuthType);
 $user = "[{$this->setopt['proxyAuthUser']}]:[{$this->setopt['proxyAuthPwd']}]";
 curl_setopt($this->ch, CURLOPT_PROXYUSERPWD, $user);
 }
 }
 if (ini_get('open_basedir') == '' && ini_get('safe_mode' == 'Off'))
 //启用时会将服务器服务器返回的“Location:”放在header中递归的返回给服务器
 curl_setopt($this->ch, CURLOPT_FOLLOWLOCATION, true);
 //打开的支持SSL
 if($this->setopt['ssl']){
 //不对认证证书来源的检查
 curl_setopt($this->ch, CURLOPT_SSL_VERIFYPEER, false);
 //从证书中检查SSL加密算法是否存在
 curl_setopt($this->ch, CURLOPT_SSL_VERIFYHOST, true);
 }
 //设置http头,支持lighttpd服务器的访问
 $header[]= 'Expect:';
 curl_setopt($this->ch, CURLOPT_HTTPHEADER, $header);
 //设置 HTTP USERAGENT
 $userAgent = $this->setopt['userAgent'] ? $this->setopt['userAgent'] : $_SERVER['HTTP_USER_AGENT'];
 curl_setopt($this->ch, CURLOPT_USERAGENT, $userAgent);
 //设置连接等待时间,0不等待
 curl_setopt($this->ch, CURLOPT_CONNECTTIMEOUT, $this->setopt['timeOut']);
 //设置curl允许执行的最长秒数
 curl_setopt($this->ch, CURLOPT_TIMEOUT, $this->setopt['timeOut']);
 //设置客户端是否支持 gzip压缩
 if($this->setopt['gzip']){
 curl_setopt($this->ch, CURLOPT_ENCODING, 'gzip');
 }
 //是否使用到COOKIE
 if($this->setopt['useCookie']){
 //生成存放临时COOKIE的文件(要绝对路径)
 $cookfile = tempnam(sys_get_temp_dir(),'cuk');
 //连接关闭以后,存放cookie信息
 curl_setopt($this->ch, CURLOPT_COOKIEJAR, $cookfile);
 curl_setopt($this->ch, CURLOPT_COOKIEFILE, $cookfile);
 }
 //是否将头文件的信息作为数据流输出(HEADER信息),这里保留报文
 curl_setopt($this->ch, CURLOPT_HEADER, true);
 //获取的信息以文件流的形式返回,而不是直接输出。
 curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true) ;
 curl_setopt($this->ch, CURLOPT_BINARYTRANSFER, true) ;
 }
 
 /**
 * 以 GET 方式执行请求
 *
 * @param string $url :请求的URL
 * @param array $params :请求的参数,格式如: array('id'=>10,'name'=>'yuanwei')
 * @param array $referer :引用页面,为空时自动设置,如果服务器有对这个控制的话则一定要设置的.
 * @return 错误返回:false 正确返回:结果内容
 */
 public function get($url,$params=array(), $referer='')
 {
 return $this->_request('GET', $url, $params, array(), $referer);
 }
 
 /**
 * 以 POST 方式执行请求
 *
 * @param string $url :请求的URL
 * @param array $params :请求的参数,格式如: array('id'=>10,'name'=>'yuanwei')
 * @param array $uploadFile :上传的文件,支持相对路径,格式如下
 * 单个文件上传:array('img1'=>'./file/a.jpg')
 * 同字段多个文件上传:array('img'=>array('./file/a.jpg','./file/b.jpg'))
 * @param array $referer :引用页面,引用页面,为空时自动设置,如果服务器有对这个控制的话则一定要设置的.
 * @return 错误返回:false 正确返回:结果内容
 */
 public function post($url,$params=array(),$uploadFile=array(), $referer='')
 {
 return $this->_request('POST', $url, $params, $uploadFile, $referer);
 }
 
 /**
 * 得到错误信息
 *
 * @return string
 */
 public function error()
 {
 return curl_error($this->ch);
 }
 
 /**
 * 得到错误代码
 *
 * @return int
 */
 public function errno()
 {
 return curl_errno($this->ch);
 }
 
 /**
 * 得到发送请求前和请求后所有的服务器信息和服务器Header信息,其中
 * [before] :请求前所设置的信息
 * [after] :请求后所有的服务器信息
 * [header] :服务器Header报文信息
 *
 * @return array
 */
 public function getInfo()
 {
 return $this->info;
 }
 
 /**
 * 析构函数
 *
 */
 public function __destruct()
 {
 //关闭CURL
 curl_close($this->ch);
 }
 
 /**
 * 私有方法:执行最终请求
 *
 * @param string $method :HTTP请求方式
 * @param string $url :请求的URL
 * @param array $params :请求的参数
 * @param array $uploadFile :上传的文件(只有POST时才生效)
 * @param array $referer :引用页面
 * @return 错误返回:false 正确返回:结果内容
 */
 private function _request($method, $url, $params=array(), $uploadFile=array(), $referer='')
 {
 //如果是以GET方式请求则要连接到URL后面
 if($method == 'GET'){
 $url = $this->_parseUrl($url,$params);
 }
 //设置请求的URL
 curl_setopt($this->ch, CURLOPT_URL, $url);
 //如果是POST
 if($method == 'POST'){
 //发送一个常规的POST请求,类型为:application/x-www-form-urlencoded
 curl_setopt($this->ch, CURLOPT_POST, true) ;
 //设置POST字段值
 $postData = $this->_parsmEncode($params,false);
 /*
 //如果有上传文件
 if($uploadFile){
 foreach($uploadFile as $key=>$file){
 if(is_array($file)){
 $n = 0;
 foreach($file as $f){
 //文件必需是绝对路径
 $postData[$key.'['.$n++.']'] = '@'.realpath($f);
 }
 }else{
 $postData[$key] = '@'.realpath($file);
 }
 }
 }
 */
 //pr($postData); die;
 curl_setopt($this->ch, CURLOPT_POSTFIELDS, $postData);
 }
 //设置了引用页,否则自动设置
 if($referer){
 curl_setopt($this->ch, CURLOPT_REFERER, $referer);
 }else{
 curl_setopt($this->ch, CURLOPT_AUTOREFERER, true);
 }
 //得到所有设置的信息
 $this->info['before'] = curl_getinfo($this->ch);
 //开始执行请求
 $result = curl_exec($this->ch);
 //得到报文头
 $headerSize = curl_getinfo($this->ch, CURLINFO_HEADER_SIZE);
 $this->info['header'] = substr($result, 0, $headerSize);
 //去掉报文头
 $result = substr($result, $headerSize);
 //得到所有包括服务器返回的信息
 $this->info['after'] = curl_getinfo($this->ch);
 //如果请求成功
 if($this->errno() == 0){ //&& $this->info['after']['http_code'] == 200
 return $result;
 }else{
 return false;
 }
 
 }
 
 /**
 * 返回解析后的URL,GET方式时会用到
 *
 * @param string $url :URL
 * @param array $params :加在URL后的参数
 * @return string
 */
 private function _parseUrl($url,$params)
 {
 $fieldStr = $this->_parsmEncode($params);
 if($fieldStr){
 $url .= strstr($url,'?')===false ? '?' : '&';
 $url .= $fieldStr;
 }
 return $url;
 }
 
 /**
 * 对参数进行ENCODE编码
 *
 * @param array $params :参数
 * @param bool $isRetStr : true:以字符串返回 false:以数组返回
 * @return string || array
 */
 private function _parsmEncode($params,$isRetStr=true)
 {
 $fieldStr = '';
 $spr = '';
 $result = array();
 foreach($params as $key=>$value){
 $value = urlencode($value);
 $fieldStr .= $spr.$key .'='. $value;
 $spr = '&';
 $result[$key] = $value;
 }
 return $isRetStr ? $fieldStr : $result;
 }
 }

3. [图片] QQ截图20130502205225.png    

精彩图集

赞助商链接