PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息

了解完了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命令。

PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息

进入TELNET 命令输入模式后我们就可以直接编辑头文件来进行发送了

只需要注意:当编辑完请求头文件后要按两次回车键来发送。

PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息

这是一次标准的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方式。

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

更多相关文章
  • 在网上查了很长时间没有找到解决方法,干脆自已查看一下代码来解决吧,随是压缩过的,不过也还是好查的,工夫不负有心人,终于解决了,方法如下: 一.我们先让表格自适应宽度 <!DOCTYPE html> <html> <head> <meta charset=&q ...
  • 先来看看问题的来源,假设有这么一个数组: 1 2 -5 4 -2 3 -3 4 -15 我们要求出其中连续字数组的和的最大值 例如这么可以很明显看出 4+ –2 + 3 + –3 + 4 = 6 所有可能子数组的和的是最大值. 那我们应该如何实现呢:首先就是把所有可能的字数组的和求出来然后作比较就能 ...
  • 由于越来越多的网络应用(如电子邮件.SNS社交网络.P2P等)及其流量给企业系统和网络管理者提出了更高的安全要求,需要高效.合理地对这些流量采用相应的策略和技术进行管理.本文将基于此背景,主要介绍网络流量安全管理策略.   网络流量安全管理的主要目标和策略   目标   随着网络流量的不断增长以及网 ...
  • 组织结构图(Organization chart)是企业的流程运转.部门设置及职能规划等最基本的结构依据.和客户交流时,不少人都提到需要一个灵活的工具来绘制呈现企业的组织架构,今天就给大家带来一款用TWaver实现的组织结构图,提供多种布局方式,为了清晰呈现组织里每个人的职能,我们定制了名片样式来展 ...
  • 易网科技讯 8月9日消息,艺龙(Nasdaq:LONG)于今日收盘后发布了截至2011年6月30日未经审计的第二季度财报.财报数据显示,艺龙第二季度营收1.391亿人民币(约合2150万美元),较去年同期的1.189亿人民币上涨17%:净利润为710万人民币(约合110万美元),较去年的940万人民 ...
  • 今天有幸参加了存储届的又一行业盛典中国闪存论坛.学术界.工业界的很多人给出了自己使用闪存.采用闪存优化应用.闪存产品.闪存技术的独特见解.我也有幸通过分论坛给出了自己对闪存技术的一些理解和想法,特别是全闪存阵列的技术发展和挑战.今天也听了很多的技术报告,其中,最吸引我的还是华中科技大学给出的< ...
一周排行
  • 转载请注明 んㄗ葑訫鎖愛S Blog http://www.virusest.com晴天电影免费版 2009.8.10号更新 存在SQL注入漏洞这个注入点比较隐蔽,需要自己构造注入点.问题出在my/GetUrl.as ...
  • 公司内部有多个网站同时对外提供服务,例如Web1和Web2且希望公网的用户都通过80端口来进行访问,那么路由器一般只能把80映射给Web1而Web2则不能使用80端口来访问,而TMG功能强大可以通过一个80端口来访问 ...
  • 纷纷扰扰的电子商务网站层出不穷,可谓是乱花渐欲迷人眼. 近日,淘宝推批发平台.当当转型网上百货.京东商城表示100分钟内解决售后问题.麦考林推男装频道.美团等团购网站引人关注-- 电子商务的商机深不可测,不然也不会引 ...
  • VPN网络同样也需要这三部分,不同的是VPN连接不是采用物理的传输介质,而是使用一种称之为"隧道"的东西来作为传输介质的,这个隧道是建立在公共网络或专用网络基础之上的,如因特网或专用Intrane ...
  • 1.在64位系统里注册32位软件所需的一些dll会提示不兼容,大概因为32 位进程不能加载64位Dll,64位进程也不可以加载32的导致. 若要支持的32 位和64 位COM 注册和程序共存状态,需要WOW64 子系 ...
  •  Now you need to find out what version of PHP is installed on OSX$ php -vPHP 5.3.10 with Suhosin-Patch (cli) ...
  • Office system确实被Microsoft打造成了一个应用的平台(如UC.BI.ECM.Collaboration.Search),可惜在中国,由于盗版的原因,渠道没有足够的利润来支持基于Office Sys ...
  • 灵科路由器苹果机上网设置   对于平时不常见的苹果电脑,大多数网友可能不太清楚怎么设置上网, 今天我就以网件路由器和苹果电脑为例,给大家介绍一下.   一.将灵科路由器接通电源,与苹果电脑用网线连接.   二.将Ma ...
  • FaceBook 发布了一款能将php代码转换为C++的工具,hiphop如果你的网站很大,类似浪新这样的大型门户,可以考虑.目前已经在CentOS和ubuntu等Linux服务器上编译通过.安装:一.需要依赖的包 ...
  • 欧几里得算法基于这样一个 GCD 递归定理: $gcd(a, b) = gcd(b, a\bmod{b}) $ 证明如下: 假设 $a > b$, $a = kb + r(0 <= r < b)$, ...