fsockopen封装

/**

     *  post数据

     *  @param string $url        post的url

     *  @param int $limit        返回的数据的长度

     *  @param string $post        post数据,字符串形式username='dalarge'&password='123456'

     *  @param string $cookie    模拟 cookie,字符串形式username='dalarge'&password='123456'

     *  @param string $ip        ip地址

     *  @param int $timeout        连接超时时间

     *  @param bool $block        是否为阻塞模式

     *  @return string            返回字符串

     */

    

    private function _ps_post($url, $limit = 0, $post = '', $cookie = '', $ip = '', $timeout = 15, $block = true) {

        $return = '';

        $matches = parse_url($url);

        $host = $matches['host'];

        $path = $matches['path'] ? $matches['path'].($matches['query'] ? '?'.$matches['query'] : '') : '/';

        $port = !empty($matches['port']) ? $matches['port'] : 80;

        $siteurl = $this->_get_url();

        if($post) {

            $out = "POST $path HTTP/1.1\r\n";

            $out .= "Accept: */*\r\n";

            $out .= "Referer: ".$siteurl."\r\n";

            $out .= "Accept-Language: zh-cn\r\n";

            $out .= "Content-Type: application/x-www-form-urlencoded\r\n";

            $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";

            $out .= "Host: $host\r\n" ;

            $out .= 'Content-Length: '.strlen($post)."\r\n" ;

            $out .= "Connection: Close\r\n" ;

            $out .= "Cache-Control: no-cache\r\n" ;

            $out .= "Cookie: $cookie\r\n\r\n" ;

            $out .= $post ;

        } else {

            $out = "GET $path HTTP/1.1\r\n";

            $out .= "Accept: */*\r\n";

            $out .= "Referer: ".$siteurl."\r\n";

            $out .= "Accept-Language: zh-cn\r\n";

            $out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";

            $out .= "Host: $host\r\n";

            $out .= "Connection: Close\r\n";

            $out .= "Cookie: $cookie\r\n\r\n";

        }

        $fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);

        if(!$fp) return '';

    

        stream_set_blocking($fp, $block);

        stream_set_timeout($fp, $timeout);

        @fwrite($fp, $out);

        $status = stream_get_meta_data($fp);

    

        if($status['timed_out']) return '';    

        while (!feof($fp)) {

            if(($header = @fgets($fp)) && ($header == "\r\n" ||  $header == "\n"))  break;                

        }

        

        $stop = false;

        while(!feof($fp) && !$stop) {

            $data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));

            $return .= $data;

            if($limit) {

                $limit -= strlen($data);

                $stop = $limit <= 0;

            }

        }

        @fclose($fp);

        

        //部分虚拟主机返回数值有误,暂不确定原因,过滤返回数据格式

        $return_arr = explode("\n", $return);

        if(isset($return_arr[1])) {

            $return = trim($return_arr[1]);

        }

        unset($return_arr);

        

        return $return;

    }


转载于:https://my.oschina.net/jyb2014/blog/366595

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值