fsockopen以Socket方式模拟HTTP下载文件

Posted 壁虎漫步.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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下载文件的主要内容,如果未能解决你的问题,请参考以下文章

Socket编程 之使用fsockopen()函数

SOCKET简单爬虫实现代码和使用方法

socket_create 与 fsockopen php

PHP的fsockopen方式访问接口慢的原因与优化方案

fsockopen

PHP Socket编程 之使用fsockopen()函数