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下载文件的更多相关文章
- IOUtils方式上传下载文件
package com.css.hdfs04; import java.io.File; import java.io.FileInputStream; import java.io.FileOutp ...
- 【转】Java IOUtils方式上传下载文件 on HDFS
[From]https://www.cnblogs.com/areyouready/p/9795442.html package com.css.hdfs04; import java.io.File ...
- 使用java原生API模拟请求下载文件
/** * * @param urlPath * 下载路径 * @param saveDir * 下载存放目录 * @return 返回下载文件 * @throws Exception */ publ ...
- 用jsp方式通知客户端下载文件
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- post方式实现导出/下载文件
项目需求: 前端需要传入过多的参数给后端,get地址栏不行,只能接受post方式去导出数据 1.get的下载方式 通常下载方式如下: let url = xxxx.action?a=xx&b= ...
- 简单快捷的方式从vps下载文件
安装setuptools 1) 最简单安装,假定在ubuntu下 sudo apt-get install python-setuptools SimpleHTTPServer 是单线程的临时服务,建 ...
- 使用WebClient Post方式模拟上传文件和数据
假如某网站有个表单,例如(url: http://localhost/login.aspx):帐号 密码 我们需要在程序中提交数据到这个表单,对于这种表单,我们可以使用 WebClient.Uplo ...
- C# 模拟多线程下载文件
原地址:http://www.cnblogs.com/Opiece/p/4803836.html 客户端 public static string strContent = ""; ...
- ajax方式下载文件
在web项目中需要下载文件,由于传递的参数比较多(通过参数在服务器端动态下载指定文件),所以希望使用post方式传递参数.通常,在web前端需要下载文件,都是通过指定<a>标签的href属 ...
随机推荐
- [考试反思]0811NOIP模拟测试17:虚无
(sdfz未参加,也就是一共就51个人) 也不粘具体排名了,只写分数线. []220 []201 []194 [5]181 [10]141 [15]132 [20]122 [25]116 [30]10 ...
- Python - selenium自动化-Chrome(headless)
什么是 Headless Chrome Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序.相比于现代浏览 ...
- Spring Boot 2.X(十七):应用监控之 Spring Boot Admin 使用及配置
Admin 简介 Spring Boot Admin 是 Spring Boot 应用程序运行状态监控和管理的后台界面.最新UI使用vue.js重写里. Spring Boot Admin 为已注册的 ...
- GO 基础学习笔记(1) | 简介
一.官网查看系列 Golang官网:https://golang.org/ Golang中文网:https://studygolang.com/(推荐) 项目学习网站: https://gowalke ...
- 创建一个线程池(java)
private ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("billService-poo ...
- thinkphp分页样式css代码
<style type="text/css"> .Pagination a:hover,.current{background-color: #f54281;borde ...
- count的一些用法
count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包 ...
- 领扣(LeetCode)两个列表的最小索引总和 个人题解
假设Andy和Doris想在晚餐时选择一家餐厅,并且他们都有一个表示最喜爱餐厅的列表,每个餐厅的名字用字符串表示. 你需要帮助他们用最少的索引和找出他们共同喜爱的餐厅. 如果答案不止一个,则输出所有答 ...
- GitHub远程库的搭建以及使用
GitHub远程库的搭建 一).配置SSH 步骤: 1).注册GitHub账号 2).本地git仓库与远程的GitHub仓库的传输要通过SSH进行加密 3).创建SSH key 1.检查在用户主目 ...
- 减少HTTP请求的方式
1. 图片地图 缺点:坐标难定义:除了矩形之外几乎无法定义其他形状:通过DHTML(动态DOM操作)创建的图片地图在 IE 不兼容 <img usemap="#map1" b ...