fsockopen与HTTP 1.1/HTTP 1.0
在前面的例子中,HTTP请求信息头有些指定了 HTTP 1.1,有些指定了 HTTP/1.0,有些又没有指定,那么他们之间有什么区别呢?
关于HTTP 1.1与HTTP 1.0的一些基本情况,可以参考下 HTTP 1.1的详细介绍 。
我们先来看一下 fsockopen 不指定 HTTP 的情况:
function asyn_sendmail()
{
$ip = '121.199.24.143';
$url = '/php/sock.php';
$fp = fsockopen($ip, 80, $errno, $errstr, 5);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
}
$end = "\r\n";
$input = "GET $url$end";
$input.="$end";
fputs($fp, $input);
$html = '';
while (!feof($fp))
{
$html.=fgets($fp);
}
fclose($fp);
writelog($html);
echo $html;
}
function writelog($message)
{
$path = 'F:\log2.txt';
$handler = fopen($path, 'w+b');
if ($handler)
{
$success = fwrite($handler, $message);
fclose($handler);
}
}
asyn_sendmail();
sock.php:
<?php
echo "Welcome to NowaMagic";
?>
程序输出:
Welcome to NowaMagic
log2.txt 内容也是:
Welcome to NowaMagic
那些接下来再看看在标头加上 HTTP 1.1 的程序:
function asyn_sendmail()
{
$ip = '121.199.24.143';
$url = '/php/sock.php';
$fp = fsockopen($ip, 80, $errno, $errstr, 5);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
} $end = "\r\n";
$input = "GET $url HTTP/1.1$end";
//如果不加下面这一句,会返回一个http400错误
$input.="Host: $ip$end";
//如果不加下面这一句,请求会阻塞很久
$input.="Connection: Close$end"; $input.="$end";
fputs($fp, $input);
$html = '';
while (!feof($fp))
{
$html.=fgets($fp);
}
fclose($fp);
writelog($html);
echo $html;
} function writelog($message)
{
$path = 'F:\log.txt';
$handler = fopen($path, 'w+b');
if ($handler)
{
$success = fwrite($handler, $message);
fclose($handler);
}
}
asyn_sendmail();
程序输出:
HTTP/1.1 200 OK
Date: Fri, 07 Feb 2014 13:50:14 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.3.3
Vary: Accept-Encoding
Content-Length: 21
Connection: close
Content-Type: text/html; charset=UTF-8 Welcome to NowaMagic
留意到注释:
//如果不加下面这一句,请求会阻塞很久
$input.="Connection: Close$end"; $input.="$end";
原因是什么呢? 可以参考 fsockopen用feof读取http响应内容的一些问题。
//如果不加下面这一句,会返回一个http400错误
$input.="Host: $ip$end";
报400错误:
HTTP/1.1 400 Bad Request
Date: Fri, 07 Feb 2014 13:54:57 GMT
Server: Apache/2.2.3 (CentOS)
Content-Length: 305
Connection: close
Content-Type: text/html; charset=iso-8859-1
使用http1.1连接,要加上Host请求表头。
小结:
- HTTP 1.0, Apache Web 服务器中 $input.="Connection: Close$end"; 与 $input.="Connection: Close$end" 可都不需要。
- HTTP 1.0, Nginx Web 服务器中 $input.="Connection: Close$end"; 与 $input.="Connection: Close$end" 都必需。
- HTTP 1.1, Apache Web 服务器中 $input.="Connection: Close$end"; 必须要,$input.="Connection: Close$end" 可不用。
- HTTP 1.1, Nginx Web 服务器中 $input.="Connection: Close$end"; 与 $input.="Connection: Close$end" 都必需。
fsockopen与HTTP 1.1/HTTP 1.0的更多相关文章
- 分享一个强大的采集类,还可以模拟php多进程
做采集的时候,可以使用file_get_contents()去获取网页源代码,但是使用file_get_contents采集,速度慢,而且超时时间,不好控制.如果采集的页面不存在,需要等待的时间很长. ...
- ZAM 3D 制作简单的3D字幕 流程(二)
原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...
- ZAM 3D 制作3D动画字幕 用于Xaml导出
原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...
- 微信小程序省市区选择器对接数据库
前言,小程序本身是带有地区选着器的(网站:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html),由于自己开发的程序的数据是很 ...
- osg编译日志
1>------ 已启动全部重新生成: 项目: ZERO_CHECK, 配置: Debug x64 ------1> Checking Build System1> CMake do ...
- zabbix 3.0.3 (nginx)安装过程中的问题排错记录
特殊注明:安装zabbix 2.4.8和2.4.6遇到2个问题,如下:找了很多解决办法,实在无解,只能换版本,尝试换(2.2.2正常 | 3.0.3正常)都正常,最后决定换3.0.3 1.Error ...
- fsockopen读取、发送cookie及注意事项 -代码示例
function httpPost($url, $data,$cookieStr='') { $url_array = parse_url($url); $host = $url_array['hos ...
- 利用fsockopen可实现异步成功访问
$fp = fsockopen("www.jb51.net", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ( ...
- PHP fsockopen 异步调用接口在nginx上偶尔实效的情况
private function fsock_asy_do($get){ $fp = fsockopen("ssl://www.xxx.com", 443, $errno, $er ...
随机推荐
- 关于virtualbox虚拟电脑控制台严重错误解决方法。。。
今天的我已经泪崩,忙了一天,临近下班的时候,突然发现虚拟机关了,再打开时,提示错误!!! 然后在网上查方法解决完的时候,再打开一看,完了,虚拟机里面的内容全没了...现将解决方法记录如下: 1.打开, ...
- 清华大学教学内核ucore学习系列(1) bootloader
ucore是清华大学操作系统课程的实验内核,也是一个开源项目,是不可多得的非常好的操作系统学习资源 https://github.com/chyyuu/ucore_lab.git, 各位同学可以使用g ...
- Keepalived+LVS DR模式高可用架构实践
Keepalived最初是为LVS设计,专门监控各服务器节点的状态(LVS不带健康检查功能,所以使用keepalived进行健康检查),后来加入了VRRP(虚拟路由热备协议(Virtual Route ...
- CSPS模拟 97
越来越弱了, 而且不如之前积极了,非常的颓废. 联赛前出现这种问题也是够我受的. T1 打表找规律失败.jpg 一直在找多项式规律,没找指数规律. T2 唉. T3 考虑到最多有n种颜色,考虑在线段树 ...
- NOIP模拟 16
嗯我已经是个不折不扣的大辣鸡了 上次的T3就弃了,这次又弃 颓废到天际 T1 巨贪贪心算法 我就是一个只会背板子的大辣鸡 全裸的贪心看不出来,只会打板子 打板子,加特判,然后一无进展,原题不会,这就是 ...
- wordpress插件:multiple post thumbnails(可为文章添加多个特色图片)
我们经常会给wordpress的文章加上特色图片来实现日志缩略图的需求,但是很多时候一张图片并不能够完美而又全面的表达我们wordpress文章的内容,这时候您可能就会需要这样一个能让wordpres ...
- 「Luogu 2367」语文成绩
更好的阅读体验 Portal Portal1: Luogu Description 语文老师总是写错成绩,所以当她修改成绩的时候,总是累得不行.她总是要一遍遍地给某些同学增加分数,又要注意最低分是多少 ...
- vue , debounce 使用
有时候不想直接在methods中的方法前面加debounce, getFullName: debounce(function() { console.log('my fullname is chent ...
- 易初大数据 2019年11月13日 Linux 王庆超
★安装Red Hat Enterprise Linux7.41 ◆1通过键盘的方向键选择“lnstall Red Hat Enterprise Linux7.4”选项来直接安装Linux 系统. ◆2 ...
- Git如何fork别人的仓库并作为贡献者提交代码
例如 要fork一份google的MLperf/inference代码,下面介绍具体做法:预备知识git里的参考有几种表示,分别是上游仓库,远程仓库和本地仓库,逻辑关系如下拉取代码的顺序:别的大牛的代 ...