博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
阅读量:6827 次
发布时间:2019-06-26

本文共 1681 字,大约阅读时间需要 5 分钟。

了解完了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方式。

如果您觉得本文对您有帮助,请您动手点一下推荐,如果有什么问题,可以在下方留言共同讨论,谢谢。

转载地址:http://umukl.baihongyu.com/

你可能感兴趣的文章
Qt的元对象(Meta-Object)系统简介
查看>>
matlab练习程序(最大似然估计)
查看>>
Oracle 各种查询语句
查看>>
工厂方法模式与IoC/DI
查看>>
Linux编程(获取系统时间)
查看>>
速记 - 实现sql server clr trigger
查看>>
PowerShell 开发
查看>>
C#3.0实现变异赋值(Mutantic Assignment)
查看>>
MySql的一些基本使用及操作命令 (待更新)
查看>>
题目4:棋盘寻宝扩展
查看>>
[ASP.NET MVC 小牛之路]14 - Unobtrusive Ajax
查看>>
引爆你的集合灵感 [C#, LINQ]
查看>>
可以把Windows xp模仿Vista界面工具。
查看>>
对一些面试题的回答
查看>>
c# enum用法
查看>>
Struts2 中action之间的跳转(分享)
查看>>
HDU4707:Pet(DFS)
查看>>
html标签页图标
查看>>
C# list 新用法
查看>>
Android 获取控件相对于屏幕位置
查看>>