zoukankan      html  css  js  c++  java
  • fsockopen以Socket方式模拟HTTP下载文件

    fsockopen 的功能很强大,比如前面模拟 HTTP 访问,模拟 POST/GET 请求,什么的,这里再举一个例子,那就是下载东西。比如下载 http://www.nowamagic.net//librarys/webapp/Snow.zip 这个文件,用下面的程序就能实现:

    # Socket 模拟HTTP协议传输文件
    # Http是应用层协议使用端口80
    #
    $hostname = 'www.nowamagic.net';
    $port = '80';
    # 建立连接
    $fp = fsockopen($hostname,$port,$errno,$errstr);
    //set_socket_blocking($fp,false);
    //stream_set_blocking($fp,0);
    stream_set_blocking($fp, true); 
    if(!$fp)
    {
        echo "$errno : $errstr<br/>";
    }
    else
    {
        # 发送一个HTTP请求信息头
        $request_header="GET /librarys/webapp/Snow.zip HTTP/1.1
    ";
        # 起始行
        # 头域
        $request_header.="Host: $hostname
    ";
        # 再一个回车换行表示头信息结束
        $request_header.="
    ";
    
        # 发送请求到服务器
        fputs($fp,$request_header);
        # 接受响应
        $fp2=fopen('Snow.zip','w');
        while (!feof($fp))
        {
            $line = fputs($fp2,fgets($fp,128));
            //echo $line;
        }
        # 关闭
        fclose($fp2);
        fclose($fp);
    }

    执行程序,你会发现在这个程序文件的同级目录就会出现那个你需要下载的文件了。

    这实质上是 Socket 模拟 HTTP 协议传输文件。同时还要注意一下 PHP 的超时限制,这里设置我 PHP 服务器超时为无限才能正确下载,否则可能下载不全 PHP 程序就停止了。

    同时,set_socket_blocking 和 stream_set_blocking 的用法也要稍微注意下,Google一下就能了解,这里不再赘述。

  • 相关阅读:
    selenium笔记
    gbase笔记
    oracle向gbase数据迁移须知
    字符串表达式的计算
    Struts2的安装
    JSP+MySQL中文乱码
    HTML:<input type="text">文本框不可编辑的方式
    HTML中使用<input>添加的按钮打开一个链接
    AS3.0:给图片添加滤镜模糊与斜角效果
    SQLServer 2008以上误操作数据库恢复方法—日志尾部备份
  • 原文地址:https://www.cnblogs.com/phpfensi/p/6927121.html
Copyright © 2011-2022 走看看