• ----:)欢迎访问源码网(:----
    • 首页
    • 博客
    • 学院
    • 下载
    • 论坛
    • 影视
    • 发布源码
    • RSS
    • ITPig
    • 笑话网
    • 百家姓
    • 繁體中文

源码网 - 中国第一源码门户
选择镜像:网通镜像 - 电信主站
  • 首 页
  • 新闻动态
  • 网站运营
  • 网页制作
  • WEB开发
  • 编程开发
  • 图像媒体
  • 操作系统
  • 数据库
  • 服务器
热门搜索 优化 SEO 故事 cms IIS7 MySQL 个人 AdSense 主题推广 | 文章搜索: 高级搜索
会员登录/控制面版您的位置: 学院首页 >> WEB开发 >> PHP 开发 >> PHP代码 >> 详细内容
 

推荐文章

 
 

热点文章

  • 3389远程服务器GHOST的视频教程
  • 利用纯真QQIP数据库做快速IP归属地查询
  • 天气预报小偷,根据IP自动判断地址
  • php在线文本编辑器
  • 实例(Smarty+FCKeditor新闻系统)
  • php里实现汉字转区位码
  • 对dvbbs.php 全文搜索的完全分析
  • php生成会动的gif图片代码
  • php的字符编码转换工具
  • DIV+CSS+PHP巨献——网页内容先竖排再横排
  • PHP获取网卡的MAC地址
  • 56.com视频采集接口程序(PHP)
 
 

相关文章

 
 

百度搜索

 
 

http请求类

  • 阅览次数:
  • 文章来源: CodePub整理
  • 原文作者:
  • 整理日期: 2008-08-06
  • 发表评论
  • 字体大小:
  • 小
  • 中
  • 大

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

//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 = 0 == count($this->itsPostData) ? "GET " : "POST ";
        $target .= $this->itsParseUrl["path"] . " " . $httpv;
        
        $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["Refer"] =
        isset($this->itsPHead["Refer"])
        ? $this->itsPHead["Refer"]
        : $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(0 < 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->itsFp, 256);
        $this->itsRHead["http-version"] = substr($status, 0, 8);
        $this->itsRHead["status"] = substr($status, 9, 3);
        $this->itsRHead["description"] = substr($status, 13);
        for(;1;){
            if(feof($this->itsFp)){
                fclose($this->itsFp);
                $this->itsFp = false;
                break;
            }
            if("" == $line = trim(fgets($this->itsFp, 256))){
                break;
            }
            if(0 != preg_match("~^([^:]+):(.*)$~", $line, $clip)){
                $this->itsRHead[trim($clip[1])] = trim($clip[2]);
            }
        }
        
        //重定向处理
        if(3 == $this->itsRHead["status"][0]){
            if(3 < $this->itsJumps){
                $this->itsError .= "[5]";//重定向次数已满
                return false;
            }
            if(isset($this->itsRHead["location"])){
                if("http" != substr($this->itsRHead["location"], 0, 4)){
                    $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(2 == $this->itsRHead["status"][0]){
            for(;1;){
                if(feof($this->itsFp)){
                    fclose($this->itsFp);
                    $this->itsFp = false;
                    break;
                }
                $this->itsContent .= fread($this->itsFp, 1024);
            }
            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);
    }
}
$req = new httpRequest("http://localhost/");
$req->itsPostData = array("a"=>"fasfasdf", "b"=>"ljfijoifsd", "c"=>array(1,2,3));
if($req->send()){
    echo $req->itsContent;
}else{
    echo $req->itsError;
}
?>

上一篇:PayPal全中文详解
下一篇:PHP初级程序员面试题及答案
  • 网友评论:
  • 查看所有评论
  • 我要发表评论
您的网名:
留言主题:
你要发表的内容:

 

关于本站 | 广告联系 | 版权声明 | 网站地图 | 发布软件 | 帮助中心 | 源码论坛

Copyright © 2005-2007 CodePub.Com  程序支持:木翼  滇ICP备05005971号