注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

isblog主页

或许不一定要做得最多,但一定要做得最好! 能力就是一种财富,积累越多,就越体现你

 
 
 

日志

 
 

php小偷函数类  

2012-07-11 23:26:24|  分类: PHP学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
引言:
一年半前的写的http操作的类
可以post数据 和get获取内容
支持cookie
支持3种采集方式  file_get_contents   curl   fsockopen
破解referer类型的防盗链
伪造蜘蛛进行访问user_agent
解决file_get_contents采集丢失数据bug


<?php
/*
*====================================
*Copyright:2009-2011 PTCMS.
*Author:杰少pakey
*Webblog:http://www.pakey.net
*Official:http://www.ptcms.com
*Filename:PTStealADV.class.php
*Greatdate:2011-2-24
*====================================
*/

if (defined(IN_PTCMS)) {
    exit('Access Denied');
}

//小偷函数类
class PTSteal
{
    /**
     *普通获取内容
     *$url采集的网址
     *$getnum多次获取,适用于部分空间一次无法获取内容
     *$user_agent伪造agent访问
     *$username是否采用cookies
     */
    function Code($url, $data = '', $ispost = false, $cookie = '')
    {
        if (is_array($data)) {
            $data = http_build_query($data);
        }
        $buf = parse_url($url);
        $host = $buf['host'];
        for ($getn = 1; $getn <= PTCMS_T_CODENUM; $getn++) {
            switch (PTCMS_T_function) {
                case 'file_get_contents':
                    $opts = array('http' => array('header' =>
                        "Content-type:application/x-www-form-urlencoded\r\n" . "Content-Length:" .
                        strlen($data) . "\r\n" . "User-Agent:" . PTCMS_T_USERAGENT . "\r\n" .
                        "Referer:http://$host/\r\n" . "Cookie:" . $cookie . "\r\n"), );
                    if ($ispost) {
                        $opts['http']['method'] = 'POST';
                        $opts['http']['content'] = $data;
                    }
                    $context = stream_context_create($opts);
                    $code = file_get_contents($url, false, $context);
                    $code = implode("\r\n", $http_response_header) . "\r\n\r\n" . $code;
                    break;
                case 'curl':
                    $header = array('Accept-Language:zh-cn', 'Connection:Keep-Alive',
                        'Cache-Control:no-cache', "Cookie:$cookie");
                    $ch = curl_init($url);
                    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
                    curl_setopt($ch, CURLOPT_HEADER, 1);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
                    curl_setopt($ch, CURLOPT_REFERER, "http://$host/");
                    curl_setopt($c, CURLOPT_USERAGENT, PTCMS_T_USERAGENT);  
                    if ($ispost) {
                        curl_setopt($ch, CURLOPT_POST, 1);
                        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
                    }
                    $code = curl_exec($ch);
                    curl_close($ch);
                    break;
                case 'fsockopen':
                    if (isset($buf['path'])) {
                        $page = $buf['path'];
                        if (isset($buf['query']) and trim($buf['query']) !== "") {
                            $page .= "?" . trim($buf['query']);
                        }
                    } else {
                        $page = '/';
                    }
                    if (isset($buf['port'])) {
                        $port = $buf['port'];
                    } else {
                        $port = 80;
                    }
                    if ($ispost) {
                        $header = "POST $page HTTP/1.1\r\n";
                    } else {
                        $header = "GET $page HTTP/1.1\r\n";
                    }
                    $header .= "Host:$host\r\n";
                    $header .= "Content-type:application/x-www-form-urlencoded\n";
                    $header .= "Content-length:" . strlen($data) . "\n";
                    $header .= "Connection:close\r\n";
                    $header .= "Accept:text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n";
                    $header .= "Accept-Language:zh-cn,zh;q=0.5\r\n";
                    $header .= "Accept-Charset:gb2312,utf-8;q=0.7,*;q=0.7\r\n";
                    $header .= "User-Agent:" . PTCMS_T_USERAGENT . "\r\n";
                    $header .= "Referer:http://$host/\r\n";
                    $header .= "Cookie:$cookie\r\n\r\n";
                    if ($ispost) {
                        $header .= $data . "\r\n\r\n";
                    }
                    $code = "";
                    $fp = fsockopen($host, $port, $errno, $errstr, 30);
                    if ($fp) {
                        fputs($fp, $header);
                        while (!feof($fp))
                            $code .= fgets($fp, 1024);
                        fclose($fp);
                    } else {
                        return false;
                    }
                    break;
                default:
                    return false;
                    break;
            }
            if ($code != "") {
                //return$code;
            } else {
                return false;
            }
        }
        //returnfalse;
        return $code;
    }

    /**
     *普通get获取内容
     *$url采集的网址
     *$cookie是否采用cookies
     */
    function Get($url, $cookie = '')
    {
        return $this->Code($url, '', false, $cookie);
    }

    /**
     *模拟post数据
     *登陆post不登陆post
     *$url地址
     *$data数据
     *$cookie是否采用cookies
     */
    function Post($url, $data, $cookie = "")
    {
        return $this->Code($url, $data, true, $cookie);
    }

    /**
     *模拟登陆并保存cookies
     *returntrue登陆成功false登陆失败
     *$url地址
     *$data数据
     *$sucword成功时返回的特殊字符
     */
    function GetCookie($url, $data, $ispost = true)
    {
        $code = $this->Repto(';expires=', "\r\n", $this->Code($url, $data, $ispost));
        $code = $this->Repto('/Set-Cookie:(.+?)=deleted/i', '', $code, 2);
        preg_match_all("/Set-Cookie:(.*?)\r\n/", $code, $cookies);
        return implode(";", $cookies[1]);
    }
}

  评论这张
 
阅读(626)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018