喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

上一主题 下一主题
 63  2/7  <  1  2  3  4  5  6  7  > 
     
标题: 最近写的代码 仅做交流用  
 
mumadance
新手上路
Rank: 1



UID 74176
精华 0
积分 6
帖子 12
金钱 6 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2006-5-27
来自 北京
状态 离线
支持~~
2007-4-13 10:33 PM#11
查看资料  发短消息  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2501
帖子 4654
金钱 2498 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] 紧急!寻找解决方案
修正了远程请求类型 添加了get方法请求远程数据

修正了远程请求类型 添加了通过get方法请求远程数据的功能
这个类型的灵感主要来自织梦(dedecms)的远程下载类型
个人感觉dede的那个类型的缺点在于:
过多的使用了正则(包括那个下载字符串中远程图片的函数)不利于执行效率
post方法还需要我们将post数据添加在url里 无法区分post方法中的get变量
我重新写了类型并对以上两点做出了自己的改进
目前还无法通过http上传文件到指定服务器 请高手指点
以后将加入在跳转时自动发送cookie的功能

<?php
//####################################
#    文件:request.class.php
#    名称:http请求类型
#    作者:Sanders Yao
#    共能:请求远程资源
#    目前只测试了post提交数据
#    修改时间:2007-4-16
//####################################

//http请求类
class httpRequest{
    var 
$itsUrl;        //网址
    
var $itsParseUrl;    //解析后的地址
    
var $itsFp;            //句柄
    
var $itsError;        //错误信息
    
var $itsPHead;        //发送文件头
    
var $itsRHead;        //获取文件头
    
var $itsContent;    //数据内容
    
var $itsJumps;        //被重定向次数
    
var $itsStartTime;    //开始时间
    
var $itsPostData;    //post数据
    
var $itsCChars;        //客户端字符集
    
var $itsSChars;        //服务器端字符集
    
    
function httpRequest($url ""){
        
$this->itsUrl $url;
        
$this->itsParseUrl = array(
            
"scheme"    => "http",
            
"host"        => "",
            
"port"        => 80,
            
"user"        => "",
            
"pass"        => "",
            
"path"        => "",
            
"query"        => "",
            
"fragment"    => ""
        
);
        
$this->itsFp false;
        
$this->itsError "";
        
$this->itsPHead = array();
        
$this->itsRHead = array();
        
$this->itsContent "";
        
$this->itsJumps 0;
        
$this->itsStartTime time();
        
$this->itsPostData = array();
        
$this->itsCChars "GB2312";
        
$this->itsSChars "GB2312";
        
$this->ini();
    }
    
    
//根据url初始化
    
function ini(){
        
$tmpArray parse_url($this->itsUrl);
        foreach(
$tmpArray as $k => $v){
            
$this->itsParseUrl[$k] = $v;
        }
        if(
"http" != strtolower($this->itsParseUrl["scheme"])){
            
$this->itsError .= "[1]";//无法判断协议或非http协议链接
        
}
        if(
"" == $this->itsParseUrl["host"]){
            
$this->itsError .= "[2]";//无法判断域名
        
}
        if(
"" == $this->itsParseUrl["path"]){
            
$this->itsError .= "[3]";//无法判断路径
        
}
        return 
"" == $this->itsError true false;
    }
    
    
//设定发送的文件头
    
function setHead($k$v){
        
$this->itsPHead[$k] = $v;
    }
    
    
//获取收到的文件头
    
function getHead($k){
        return isset(
$this->itsRHead[$k]) ? $this->itsRHead[$k] : "";
    }
        
    
//发送请求
    
function send($iconv false){
        
$errn 0;
        
$errs "";
        
$data "";//post数据
        
$headText "";    //debug
        
$this->itsFp = @fsockopen(
        
$this->itsParseUrl["host"],
        
$this->itsParseUrl["port"],
        
$errn$errs);
        if(
false === $this->itsFp){
            
$this->itsError .= "[4]" $errn ":" $errs;//请求失败
            
return false;
        }
        
$httpv "" == $this->getHead("http-version") ? "HTTP/1.0" "HTTP/1.1";
        
$target == count($this->itsPostData) ? "GET " "POST ";
        
$this->itsParseUrl["path"] .= "?" $this->itsParseUrl["query"];
        
$target .= $this->itsParseUrl["path"] . " " $httpv "rn";
        
        
$this->itsPHead["Host"] = 
        isset(
$this->itsPHead["Host"])
        ? 
$this->itsPHead["Host"]
        : 
$this->itsParseUrl["host"];
        
        
$this->itsPHead["Accept"] =
        isset(
$this->itsPHead["Accept"])
        ? 
$this->itsPHead["Accept"]
        : 
"*/*";
        
        
$this->itsPHead["User-Agent"] =
        isset(
$this->itsPHead["User-Agent"])
        ? 
$this->itsPHead["User-Agent"]
        : 
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3";
        
        
$this->itsPHead["Referer"] =
        isset(
$this->itsPHead["Referer"])
        ? 
$this->itsPHead["Referer"]
        : 
$this->itsParseUrl["scheme"] . "://" $this->itsParseUrl["host"] . "/";
        
        
fputs($this->itsFp$target);
        
$headText .= $target;
        foreach(
$this->itsPHead as $k => $v){
            
fputs($this->itsFp$k ": " $v "rn");
            
$headText .= $k ": " $v "rn";
        }
        
        if(
count($this->itsPostData)){
            
$this->itsPHead["Content-Type"] =
            isset(
$this->itsPHead["Content-Type"])
            ? 
$this->itsPHead["Content-Type"]
            : 
"application/x-www-form-urlencoded";
            
            if(
function_exists("iconv")){
                
$data =
                
$this->itsCChars != $this->itsSChars
                
iconv($this->itsCChars$this->itsSChars$this->importPost())
                : 
$this->importPost();
            }else{
                
$data $this->importPost();
            }
            
fputs($this->itsFp"Content-Type: " $this->itsPHead["Content-Type"] . "rn");
            
$headText .= "Content-Type: " $this->itsPHead["Content-Type"] . "rn";
            
fputs($this->itsFp"Content-Length: " strlen($data) . "rn");
            
$headText .= "Content-Length: " strlen($data) . "rn";
        }
        
        if(
"HTTP/1.1" == $httpv){
            
fputs($this->itsFp"Connection: Closernrn");
            
$headText .= "Connection: Closernrn";
        }else{
            
fputs($this->itsFp"rn");
            
$headText .= "rn";
        }
        
fputs($this->itsFp$data);
        
$headText .= $data;
        
        
$status fgets($this->itsFp256);
        
$this->itsRHead["http-version"] = substr($status08);
        
$this->itsRHead["status"] = substr($status93);
        
$this->itsRHead["description"] = substr($status13);
        for(;
1;){
            if(
feof($this->itsFp)){
                
fclose($this->itsFp);
                
$this->itsFp false;
                break;
            }
            if(
"" == $line trim(fgets($this->itsFp256))){
                break;
            }
            if(
!= preg_match("~^([^:]+):(.*)$~"$line$clip)){
                
$this->itsRHead[trim($clip[1])] = trim($clip[2]);
            }
        }
        
        
//重定向处理
        
if(== $this->itsRHead["status"][0]){
            if(
$this->itsJumps){
                
$this->itsError .= "[5]";//重定向次数已满
                
return false;
            }
            if(isset(
$this->itsRHead["location"])){
                if(
"http" != substr($this->itsRHead["location"], 04)){
                    
$tempUrl $this->itsRHead["location"];
                    
$this->itsRHead["location"] = "http://" $this->itsParseUrl["host"]
                    . 
":" $this->itsPHead["port"] . "/"
                    
$this->itsRHead["location"];
                }
                
$this->itsUrl $this->itsRHead["location"];
                
$this->ini();
                
$this->send();
            }else{
                
$this->itsError .= "[6]";//无法获取重定向地址
                
return false;
            }
        }
        
        
//读取内容
        
if(== $this->itsRHead["status"][0]){
            for(;
1;){
                if(
feof($this->itsFp)){
                    
fclose($this->itsFp);
                    
$this->itsFp false;
                    break;
                }
                
$this->itsContent .= fread($this->itsFp1024);
            }
            if(
function_exists("iconv") && $iconv){
                
$this->itsContent =
                
$this->itsSChars != $this->itsCChars
                
iconv($this->itsSChars$this->itsCChars$this->itsContent)
                : 
$this->itsContent;
            }
            return 
true;
        }
        
fclose($this->itsFp);
        
$this->itsFp false;
        return 
false;
    }
    
    
//导入并格式化post数据
    
function importPost($array NULL$perfix ""){
        
$array NULL == $array $this->itsPostData $array;
        foreach(
$array as $k => $v){
            if(
is_array($v)){
                if(
"" == $perfix){
                    
$postData[$k] = urlencode($k) . "=" $this->importPost($v$k);
                }else{
                    
$postData[$k] = urlencode($k) . "=" $this->importPost($v$perfix urlencode("[" $k "]"));
                }
            }else{
                if(
"" == $perfix){
                    
$postData[$k] = urlencode($k) . "=" urlencode($v);
                }else{
                    
$postData[$k] = $perfix urlencode("[" $k "]") . "=" urlencode($v);
                }
            }
        }
        return 
implode("&"$postData);
    }
}
?>




最近写的一些代码都会在以下地址发布,有兴趣的来批:
http://www.phpx.com/happy/thread-131368-1-1.html
2007-4-16 06:00 PM#12
查看资料  Blog  发短消息  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2501
帖子 4654
金钱 2498 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] apache 中模块优先级问题求解
奉上通过上面这个类型远程采集万网域名查询的方法

奉上通过上面这个类型远程采集万网域名查询的方法
测试用的 所以没做太复杂

<?php
if(isset($_GET["domain"])){
    
$url str_replace("{domain}"$_GET["domain"], "http://panda.[url]www.net.cn/cgi-bin/Check.cgi?domain1=[/url]{domain}&domain={domain}&image.x=14&image.y=14&big5=n&sign=2&com=yes&cn=yes&comcn=yes&mobi=yes");
    
//$req = new httpRequest("http://panda.[url]www.net.cn/cgi-bin/Check.cgi?domain1=lalalu&domain=lalalu&image.x=14&image.y=14&big5=n&sign=2&com=yes&cn=yes&comcn=yes&mobi=yes[/url]");
    
$req = new httpRequest($url);
    
$req->setHead("Referer""http://www.net.cn/");
    
$req->setHead("Accept""text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5");
    
$req->setHead("Accept-Language""zh-cn,zh;q=0.5");
    
$req->setHead("Accept-Encoding""gzip,deflate");
    
$req->setHead("Accept-Charset""gb2312,utf-8;q=0.7,*;q=0.7");
    
$req->setHead("Keep-Alive""300");
    if(
$req->send()){
        
preg_match_all(iconv("utf-8""gb2312""~.*?>([^=<]+?)=&gt; 已被注册~is"), $req->itsContent$clips);
        echo 
"已被注册:";
        
print_r($clips[1]);
        
preg_match_all(iconv("utf-8""gb2312""~.*?>([^=<]+?)=&gt;<span class=\"style1\">没有被注册</span>~is"), $req->itsContent$clips);
        echo 
"<br />未被注册:";
        
print_r($clips[1]);
    }else{
        echo 
$req->itsError;
    }
}
<!
DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>test</title>
</
head>

<
body>
<
form action="httpRequest.php">
    
域名查询:<input type="text" name="domain" />
    <
input type="submit" />
</
form>
</
body>
</
html>
?>




最近写的一些代码都会在以下地址发布,有兴趣的来批:
http://www.phpx.com/happy/thread-131368-1-1.html
2007-4-16 06:03 PM#13
查看资料  Blog  发短消息  顶部
 
chaizx (chaizx)
中级会员
Rank: 3Rank: 3
初级会员



UID 24298
精华 1
积分 455
帖子 197
金钱 445 喜悦币
威望 10
人脉 0
阅读权限 30
注册 2003-11-1
状态 离线
[推荐阅读] 新建上海php交流群
好东西,楼主高人也!
2007-4-17 08:27 AM#14
查看资料  Blog  发短消息  QQ  顶部
 
shulinge
新手上路
Rank: 1
初级会员



UID 31050
精华 0
积分 20
帖子 21
金钱 20 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2004-9-10
来自 XreaCN
状态 离线
[推荐阅读] 北京某网站招聘PHP程序员
学习下。。。。。。
2007-4-17 08:02 PM#15
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 2501
帖子 4654
金钱 2498 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] 春节收到的1000张真人裸女照片
本次修改修正了以下bug:
以前不能正确地处理通名的http头的的行比如有两行Set-Cookie我只保存了最后一行 目前修正了这个功能

本次修改添加了以下功能:
保存cookie的功能 要启动该功能需要设定可写的cookie保存目录 并赋值给属性itsCookieDir 每个域名发送的cookie会保存为一个php文件 如果服务器端返回的cookie值为"deleted" 本地cookie将会被删除

有兴趣的请帮我测试一下 在下感激之至 另外小心村里的php标记会吃掉斜线 测试请下载附件

<?php
//####################################
#    文件:request.class.php
#    名称:http请求类型
#    作者:Sanders Yao
#    共能:请求远程资源
#    目前只测试了post提交数据
#    修改时间:2007-4-22
//####################################

//http请求类
class httpRequest{
    var 
$itsUrl;        //网址
    
var $itsParseUrl;    //解析后的地址
    
var $itsFp;            //句柄
    
var $itsError;        //错误信息
    
var $itsPHead;        //发送文件头
    
var $itsRHead;        //获取文件头
    
var $itsContent;    //数据内容
    
var $itsJumps;        //被重定向次数
    
var $itsStartTime;    //开始时间
    
var $itsPostData;    //post数据
    
var $itsCChars;        //客户端字符集
    
var $itsSChars;        //服务器端字符集
    
var $itsCookieDir;    //cookie保存目录
    
    
function httpRequest($url ""){
        
$this->itsUrl $url;
        
$this->itsParseUrl = array(
            
"scheme"    => "http",
            
"host"        => "",
            
"port"        => 80,
            
"user"        => "",
            
"pass"        => "",
            
"path"        => "",
            
"query"        => "",
            
"fragment"    => ""
        
);
        
$this->itsFp false;
        
$this->itsError "";
        
$this->itsPHead = array();
        
$this->itsRHead = array();
        
$this->itsContent "";
        
$this->itsJumps 0;
        
$this->itsStartTime time();
        
$this->itsPostData = array();
        
$this->itsCChars "GB2312";
        
$this->itsSChars "GB2312";
        
$this->ini();
        
$this->itsCookieDir false;
    }
    
    
//根据url初始化
    
function ini(){
        
$tmpArray parse_url($this->itsUrl);
        foreach(
$tmpArray as $k => $v){
            
$this->itsParseUrl[$k] = $v;
        }
        if(
"http" != strtolower($this->itsParseUrl["scheme"])){
            
$this->itsError .= "[1]";//无法判断协议或非http协议链接
        
}
        if(
"" == $this->itsParseUrl["host"]){
            
$this->itsError .= "[2]";//无法判断域名
        
}
        if(
"" == $this->itsParseUrl["path"]){
            
$this->itsError .= "[3]";//无法判断路径
        
}
        return 
"" == $this->itsError true false;
    }
    
    
//设定发送的文件头
    
function setHead($k$v){
        
$this->itsPHead[$k] = $v;
    }
    
    
//获取收到的文件头
    
function getHead($k){
        return isset(
$this->itsRHead[$k]) ? $this->itsRHead[$k] : "";
    }
        
    
//发送请求
    
function send($iconv false){
        
$errn 0;
        
$errs "";
        
$data "";//post数据
        
$headText "";    //debug
        
@include($this->itsCookieDir $this->itsParseUrl["host"] . ".php");    //cookie数据
        
$this->itsFp = @fsockopen(
        
$this->itsParseUrl["host"],
        
$this->itsParseUrl["port"],
        
$errn$errs);
        if(
false === $this->itsFp){
            
$this->itsError .= "[4]" $errn ":" $errs;//请求失败
            
return false;
        }
        
$httpv "" == $this->getHead("http-version") ? "HTTP/1.0" "HTTP/1.1";
        
$target == count($this->itsPostData) ? "GET " "POST ";
        
$this->itsParseUrl["path"] .= "?" $this->itsParseUrl["query"];
        
$target .= $this->itsParseUrl["path"] . " " $httpv "rn";
        
        
$this->itsPHead["Host"] = 
        isset(
$this->itsPHead["Host"])
        ? 
$this->itsPHead["Host"]
        : 
$this->itsParseUrl["host"];
        
        
$this->itsPHead["Accept"] =
        isset(
$this->itsPHead["Accept"])
        ? 
$this->itsPHead["Accept"]
        : 
"*/*";
        
        
$this->itsPHead["User-Agent"] =
        isset(
$this->itsPHead["User-Agent"])
        ? 
$this->itsPHead["User-Agent"]
        : 
"Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.3";
        
        
$this->itsPHead["Referer"] =
        isset(
$this->itsPHead["Referer"])
        ? 
$this->itsPHead["Referer"]
        : 
$this->itsParseUrl["scheme"] . "://" $this->itsParseUrl["host"] . "/";
        
        if(isset(
$allCookieData)){
            
$pcookies = array();
            foreach(
$allCookieData as $v){
                
$pcookies[] = $v["name"] . "=" $v["value"];
            }
            
$this->itsPHead["Cookie"] = implode