PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
来源:互联网 发布:获取http请求body数据 编辑:程序博客网 时间:2024/04/29 00:36
了解完了HTTP头信息和URL信息的具体内容,我们开始尝试自己动手写一段头信息发送到服务器。Windows内置命令Telnet可以帮助我们发送简单的HTTP请求。
并且TELNET是一个特别灵活的工具,我们还可以用它进行FTP/SMTP/POP3/TCP等方式的简单请求。
通过开始菜单--运行--CMD命令进入DOS状态,
我们输入“Telnet 主机地址 端口(Telnet 192.168.1.99 80)” 来进入telnet命令状态(完全黑窗口,此时输出字符会出问题),我们按”ctrl”+”]”,切回普通CMD窗口,再按”ENTER”回车键进入编辑命令状态。
如果系统提示找不到TELNET命令,只需按如下方式可解锁TELNET命令。
进入TELNET 命令输入模式后我们就可以直接编辑头文件来进行发送了
只需要注意:当编辑完请求头文件后要按两次回车键来发送。
这是一次标准的HTTP请求与响应,是不是跟上节的HTTP文件关联了。
当然我们不能只用这么不方便的工具,下面要介绍的是PHP里的fsockopen()方法。
先来看fsockopen()方法的原型:
resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
它返回一个资源类型的结果,需要传入的参数分别是:
$hostname:主机名
$port:端口号
$errno:错误号(注意原型中的"&"一旦连接有错误,错误号将会被赋值给$errno)
$errstr:错误字符串(一旦连接有错误,错误信息将会被赋值给$errstr)
$timeout:超时时间
$host=parse_url($url,PHP_URL_HOST);//获取host数据$port=parse_url($url,PHP_URL_PORT)==null ? 80 : parse_url($url,PHP_URL_PORT);//获取端口数据,如果没有设置则默认为80$path=parse_url($url,PHP_URL_PATH);//获取到path信息后面使用$socket=fsockopen($host,$port,$errno,$errstr,20);//获取资源类型$socket
这个资源类型就如同Telnet里我们用telnet 主机名 端口号 命令之后的环境。
那么接下来,我们就要往这个环境里写内容了。
我们可以分次用fwrite()方法写入头信息,也可以将头信息进行拼合一次写入。
fwrite($socket, "POST ".$path." HTTP/1.1\r\n"); fwrite($socket, "HOST: localhost\r\n\r\n");
或先拼合再写入的方式:
$str="POST ".$path." HTTP/1.1\r\n"."HOST: localhost\r\n\r\n";fwrite($socket,$str);
注意:请求行、报头之间有一次回车键,我们用"\r\n"来进行回车输入,结束输入时两用"\r\n\r\n"模拟两次回车。
接下来我们用fread来读取响应信息并将其存入$info中:
while (!feof($socket)) { //当还有待读取内容 $info.= fgets($socket, 4096); //每次读取4096个字节内容,并用.连接符连接到$info中。} echo $info;//输出返回结果。
当然以上是一个特别简单的例子,我们可以通过拼合更多的报头信息(加入Accept等)来将它更加完善。
接下来我们会说一些常用的POST方式。
- PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
- PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
- PHP fsockopen模拟发送post set请求
- fsockopen模拟post,get发送请求
- PHP模拟发送POST请求之二、用PHP和JS处理URL信息
- php 模拟发送post请求
- php模拟post请求发送文件
- PHP 模拟post请求发送数据
- [php]模拟socket发送GET,POST请求
- PHP模拟发送POST请求之四、加强file_get_contents()发送POST请求
- HttpWebRequest发送模拟POST请求
- 浏览器模拟发送post请求
- fsockopen 模拟 post get 请求
- HTTP协议 fsockopen模拟请求代理端发送get post请求 curl基本使用
- PHP模拟发送POST请求之五curl基本使用和多线程优化
- PHP模拟发送POST请求之一、HTTP协议头部解析
- php socket模拟POST GET请求 fsockopen版
- Java 后台模拟发送 POST GET 请求
- Intent启动activity之FLAG_ACTIVITY相关行为使用技巧
- 怀孕后要穿孕妇内衣吗?听听妈咪们都怎么说
- Spring3.0+Hibernate+Atomikos集成构建JTA的分布式事务--解决多数据源跨库事务
- Mysql数据库主要系统表说明
- 平行四边形的面积公式是如何推导的?
- PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
- wireshark过滤规则及使用方法
- 五大经典算法之三动态递归DP
- nginx在linux系统下的安装部署,以及反向代理https请求协议,ssl证书的生成,负载均衡tomcat服务器!
- require.js与sea.js的区别
- svn: Aborting commit: 'E:\myeclipse\workplaces\……“ remains in conflict
- 前段学习路线
- STM32F030_LED详细配置总结
- Linux vmstat命令实战详解