PHP socket 模拟POST 恳求实例代码__第1页
PHP socket 模拟POST 恳求实例代码__第2页
PHP socket 模拟POST 恳求实例代码__第3页
PHP socket 模拟POST 恳求实例代码__第4页
PHP socket 模拟POST 恳求实例代码__第5页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、PHP socket 模拟POST 恳求实例代码_ 我们用到最多的模拟POST恳求几乎都是用法php curl来实现了,没考虑到PHP socket也可以实现,今日看到伴侣写了一文章,下面我来给大家分享一下PHP socket模拟POST恳求实例。 以前模拟post恳求俺都用PHP curl扩展实现来着,没想过PHP socket也可以实现。最近翻了下相关资料才发觉原来没有那么高深,只是以前始终没有完全理解post的原理和本质而已,其实就是发送给目的程序一个标记为post的协议串如下: POST /目的程序url HTTP/1.1 Accept: 接收信息格式 Referer: url来路 A

2、ccept-Language: 接收语言 Content-Type: application/x-form-urlencoded Cookie: 网站cookie,不用俺过多说明,对吧? User-Agent: 用户代理,操作系统及版本、CPU 类型、扫瞄器及版本等信息 Host: 要发送到的主机地址 Content-Length: 发送数据的长度 Pragma: 本地是否存在缓存 Cache-Control: 是否需要网页缓存 Connection: 连接状态 username=fengdingbopassword= /post发送的数据 我想大家对表单的post方法提交数据应当是最熟识不过

3、了,例如我们想把用户名和密码发送给某个页面的时候,填写好相应的input框,点击提交按钮,最终把这个表单发送到action程序的就是以上数据。知道了这一点我想就不难了 这时候我们只需要用php的socket打开一个端口,例如80端口,把以上信息利用这个端口发送给目的程序就行了。 我们如何在一个端口上建立一个socket通道呢? 在PHP中是如此简洁呢! 官方给的原型: resource fsockopen ( string $hostname , int $port = -1 , int $errno , string $errstr , float $timeout = ini_get(de

4、fault_socket_timeout) ) 下边是人类的理解: fsockopen(主机名称,端口号,错误号的变量,错误提示的变量,超时时间) 主机名称就是你需要发送数据的目的地; 端口号就是这个目的程序会在哪个端口等着你的数据; 错误号的变量,这个是假如建立socket不胜利的时候返回的错误编号; 错误提示的变量,是错误的时候返回的错误提示信息; 超时时间,就是post数据之后假如对方没有回应信息,等待的最长时间。 假如不出意外(你正确的设置fsockopen()函数的参数)的话,一个socket通道现在已经打开了,我们下一步需要做的就是,通过这个打开的通道把post恳求协议发给目的程序

5、,这时候可以用法fwrite或者fputs函数中的任意一个,把post的恳求格式发给fsockopen()打开的资源句柄,这时候一个宏大的socket模拟的post恳求就诞生了。 代码如下: ?php /* * SOCKET扩展函数 * copyright (c) 2021 * author Qiufeng fengdingbo * link l Referer: $referer Accept-Language: zh-CN,zh;q=0.8 Content-Type: application/x-form-urlencodem Cookie: token=value; pub_cookie

6、time=2592021; pub_sauth1=value; pub_sauth2=value User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17 Host: $host Content-Length: $length Pragma: no-cache Cache-Control: no-cache Connection: closern $data HEADER; fwrite($fp, $POST); $resu

7、lt = ; while(!feof($fp) / receive the results of the request $result .= fread($fp, 512); else return array( status = error, error = $errstr ($errno) ); / close the socket connection: fclose($fp); / split the result header from the content $result = explode(rnrn, $result, 2); / return as structured a

8、rray: return array( status = ok, header = isset($result0) ? $result0 : , content = isset($result1) ? $result1 : ); print_r(socket_post( array(name=qiufeng,password=md5(); /* e.g: socket_post(, array(name=qiufeng,password=md5(); */ /* End of file socket_helper.php */ 事实上,当socket通道打开时,我们传的COOKIE是正确的话,

9、(截图运行的php代码来自上边,运行后返回的网页消失了我的用户名,说明对方网站已经承认我已经登录了)咱就可以干N多事情,比如刷帖,刷回复等,你们懂的,对吧? 好了上面还不够有劝说力我们来看一个php socket实现图片上传 这个代码有两点要留意: 一是他是http的post 恳求; 二是表单上传协议, 下的恳求 串适合任何语言. 代码如下 ?php $remote_server = ; $boundary = -.substr(md5(rand(0,32021),0,10); / Build the header $header = POST /api.php?action=twupload

10、 HTTP/1.0rn; $header .= Host: $remote_serverrn; $header .= Content-type: multipart/form-data, boundary=$boundaryrn; /* / attach post vars foreach($_POST AS $index = $value) $data .=-$boundaryrn; $data .= Content-Disposition: form-data; name=.$index.rn; $data .= rn.$value.rn; $data .=-$boundaryrn; */

11、 $file_name = aaa.jpg; $content_type = image/jpg; $data = ; / and attach the file $data .= -$boundaryrn; $content_file = file_get_contents(aaa.jpg); $data .=Content-Disposition: form-data; name=userfile; filename=$file_namern; $data .= Content-Type: $content_typernrn; $data .= .$content_file.rn; $data .=-$boundary-rn; $header .= Content-length: . strlen($data) . rnrn; / Open

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论