首页 > 代码库 > fsockopen以Socket方式模拟HTTP下载文件
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\n"; # 起始行 # 头域 $request_header.="Host: $hostname\n"; # 再一个回车换行表示头信息结束 $request_header.="\n"; # 发送请求到服务器 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一下就能了解,这里不再赘述。
fsockopen以Socket方式模拟HTTP下载文件
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。