PHP用socket模拟post之fsocketopen
来源:互联网 发布:小林聪美 知乎 编辑:程序博客网 时间:2024/05/17 23:29
地听说这个功能需求的时候,立即就蒙了,不骗大家!首先PHP的socket几乎都没使用过,其次没有听说过post还能用PHP的socket来模拟的呢!后来找了个案例看了看,才明白其实没有那么高深,只不过战地还不清楚post的原理和本质而已,其实本质就是发送给目的程序一个标志为post的协议串如下:
POST /目的程序 HTTP/1.1
Accept: */*
Accept-Language: zh-cn,en-us;q=0.5
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
Host: 要发送到的主机地址
Content-Length: 发送数据的长度
Pragma: no-cache
Cache-Control: no-cache
username=php&password=iask //post发送的数据
我想大家对form的post方法应该是最熟悉不过了,例如我们想吧用户名和密码发送给某个页面的时候,点击有两个文本域的表单的提交按钮,这个表单发送到action程序的就是以上数据。知道了这一点我想就不难了。
这时候我们只需要用php的socket打开一个端口,例如80端口,把以上信息利用这个端口发送给目的程序就行了。
我们如何在一个端口上建立一个socket信道呢?
在PHP中是如此简单呢!
fsocketopen(主机名称,端口号码,错误号的接受变量,错误提示的接受变量,超时时间)
主机名称就是你需要发送数据的目的地;
端口号就是这个目的程序会在哪个端口等着你的数据;
错误号的接受变量,这个是如果建立socket不成功的时候返回的错误编号;
错误提示的变量,是错误的时候返回的错误提示信息;
超时时间,就是post数据之后如果对方没有回应信息,等待的最长时间。
如果不出意外(你正确的设置fsocketopen()函数的参数)的话,一个socket信道现在已经打开了,我们下一步需要做的就是,通过这个打开的信道把post请求协议发给目的程序,这时候可以使用fwrite或者fputs函数中的任意一个,把post的请求格式发给fsocketopen()打开的句柄,这时候一个伟大的socket模拟的post请求就诞生了。顺便说一下啊:
你发送的时候可不能把我的post请求格式直接ctrl + V过去,你没看见里面的汉字等你自己去填写的吗?
以上是文字的描述,如果大家觉得说的非常垃圾,非常没有说服力的话,下边有一个现成的程序片段,大家可以看看。
$port = $url['port'] ? $url['port'] : 80;
$fp = fsockopen($url['host'], $port, $errno, $errstr,10);
if (!$fp) return "在主机: $url[host] $port 打开socket失败,失败原因是: $errno - $errstr";
fputs($fp, sprintf("POST %s%s%s HTTP/1.0rn", $url['path'], $url['query'] ? "?" : "", $url['query']));
fputs($fp, "Host:".$url['host']."rn");
fputs($fp, "Content-type: application/x-www-form-urlencodedrn");
fputs($fp, "Content-length: " . strlen($encoded) . "rn");
fputs($fp, "Connection: closernrn");
fputs($fp, "$encoded ");
对了还是顺便说一下吧,fgets($fp,1024);这个可以得到返回值的哦!!已经有不止一个人问过我咋接受返回了!!
- PHP用socket模拟post之fsocketopen
- 用socket模拟php中get,post
- PHP的socket模拟POST
- PHP socket,server,cient:模拟 post
- PHP socket,server,cient:模拟 post
- php socket模拟post(转发)
- php+socket模拟get,post请求
- [php]模拟socket发送GET,POST请求
- PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
- PHP模拟发送POST请求之三、用Telnet和fsockopen()模拟发送POST信息
- php socket模拟POST GET请求 fsockopen版
- file_get_contents fsocketopen分别模拟http请求
- PHP模拟发送POST请求之二、用PHP和JS处理URL信息
- 用php模拟http post 数据
- 用php curl 模拟post 提交
- php 用fsocket模拟浏览器POST GET
- php模拟post行为
- PHP模拟post,get
- Android缓存框架:ACache
- Androidpn客户端调试
- WPF Template模版之DataTemplate与ControlTemplate【一】
- 2178 表达式运算Cuties
- Zookeeper原理
- PHP用socket模拟post之fsocketopen
- mysql的各种查询
- 3D 数据的获取和读入
- C++实现encodeURI 2
- 第六周项目3-人数不定的工资类
- 英文版计算机语言教程的疑难例句备注
- linux下的svn部署
- 有向图的邻接矩阵存储
- MySql安装过程“Start Service”失败解决方法