免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1800 | 回复: 1
打印 上一主题 下一主题

一个curl和fsockopen的应用class,哪错了 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-04 03:39 |只看该作者 |倒序浏览
class SWHTTP {
    private $useType = TRUE;
    private $handler = NULL;

    public function swinit(){
        if(function_exists('curl_init')) {
            $this->useType = TRUE;
        } else {
            $this->useType = FALSE;
        }
    }

    public function Sw_Run_Method($url, $vars = array(), $cookies = array(), $method = 'POST'){

        // 选择使用CURL或者Fsockopen
        if($this->useType) {
            // 处理 Cookies
            $header = array();
            if(!empty($cookies)) {
                if(is_array($cookies)) {
                    $encoded = '';
                    while(list($k, $v)=each($cookies)) {
                        $encoded .= ($encoded ?';' : '');
                        $encoded .= rawurlencode($k).'='.rawurlencode($v);
                        $header = array('Cookie :'. $encoded);
                    }
                } else if(is_string($cookies)) {
                    if(strtolower(substr($cookies, 0, 7)) == 'cookie:') {
                        $header = array($cookies);
                    } else {
                        $header = array('Cookie :'. $cookies);
                    }
                }
            }

            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $header);

            if(in_array($method, array('POST'))) {
                curl_setopt($ch, CURLOPT_POST, TRUE);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
            }

            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            $data = curl_exec($ch);

            $data = $data ? $data : 'CURL_ERRROR';

            return $data;
        } else {

论坛徽章:
0
2 [报告]
发表于 2009-05-04 03:40 |只看该作者
            //组织COOKIE数据
            $cookie = '';
            if (!empty($cookies)){
                if (is_array($cookies)){
                    $encoded = '';
                    while (list($k,$v) = each($cookies)) {
                        $encoded .= ($encoded ? ";" : "");
                        $encoded .= rawurlencode($k)."=".rawurlencode($v);
                    }
                    $cookie = $encoded;
                } elseif (is_string($cookies)){
                    if (strtolower(substr($cookies, 0, 7)) == 'cookie:'){
                        $cookie = substr($cookies, 7);
                    } else {
                        $cookie = $cookies;
                    }
                }
            }

            if($method == 'POST') {
                // 处理POST请求
                $post = '';
                if(!empty($vars)) {
                    if (is_array($vars)){
                        $encoded = '';
                        while (list($k,$v) = each($vars)) {
                            $encoded .= ($encoded ? "&" : "");
                            $encoded .= rawurlencode($k)."=".rawurlencode($v);
                        }
                        $post = $encoded;
                    } else {
                        $post = $vars;
                    }
                }
            }

            // 处理请求
            $url = parse_url($url);
            if(strtolower($url['scheme']) != 'http' && $url['scheme'] != '') {
                return 'fsockopen error';
            }
            if(!($fp = @fsockopen($url['host'], $url['port'] ? $url['port'] : 80, $errno, $errstr, 10))) {
                return "Fsockopen Error:
No:{$errno}
String:{$errstr}"
;
            }

            if($method == 'POST') {
                fputs($fp, sprintf("POST %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? $url['query'] : "", $url['query']));
            } else if($method == 'GET') {
                fputs($fp, sprintf("GET %s%s%s HTTP/1.0\n", $url['path'], $url['query'] ? $url['query'] : "", $url['query']));
            }
            fputs($fp, "Host: {$url['host']}\n");
            fputs($fp, "User-Agent: HFHttp-Client\n");
            if($cookie != '') {
                fputs($fp, "Cookie: {$cookie}\n\n");
            }
            if($method == 'POST') {
                fputs($fp, "Content-type: application/x-www-form-urlencoded\n");
                fputs($fp, "Content-length: " . strlen($post) . "\n");
                fputs($fp, "Connection: close\n\n");
                fputs($fp, "$post \n");
            } else if($method == 'GET') {
                fputs($fp, "Connection: close\n\n");
                fputs($fp, "$post \n");
            }

            $ret = '';
            while (!feof($fp)) {
                $c = fgets($fp, 1024);
                if (preg_match("/^HTTP/", $c) || preg_match("/^P3P/", $c) || preg_match("/^([A-Za-z\-]+)\:\s*(.*)$/", $c)){
                    continue;
                }

                if (trim($c) == ""){
                    continue;
                }
                $ret .= $c;
            }
            fclose($fp);

            return $ret;
        }
    }
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP