我们用到最多的模拟POST请求几乎都是使用php curl来实现了,没考虑到PHP socket也可以实现,今天看到朋友写了一文章,下面我来给大家分享一下PHP socket模拟POST请求实例。
以前模拟post请求俺都用PHP curl扩展实现来着,没想过PHP socket也可以实现。最近翻了下相关资料才发现原来没有那么高深,只是以前一直没有完全理解post的原理和本质而已,其实就是发送给目的程序一个标志为post的协议串如下:
POST /目的程序url HTTP/1.1
Accept: 接收信息格式
Referer: url来路
Accept-Language: 接收语言
Content-Type: application/x-www-form-urlencoded
Cookie: 网站cookie,不用俺过多解释,对吧"color: #993300">resource fsockopen ( string $hostname [, int $port = -1 [, int &$errno [, string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] )
下边是人类的理解:
fsockopen(主机名称,端口号,错误号的&变量,错误提示的&变量,超时时间)
主机名称就是你需要发送数据的目的地;
端口号就是这个目的程序会在哪个端口等着你的数据;
错误号的&变量,这个是如果建立socket不成功的时候返回的错误编号;
错误提示的&变量,是错误的时候返回的错误提示信息;
超时时间,就是post数据之后如果对方没有回应信息,等待的最长时间。
如果不出意外(你正确的设置fsockopen()函数的参数)的话,一个socket通道现在已经打开了,我们下一步需要做的就是,通过这个打开的通道把post请求协议发给目的程序,这时候可以使用fwrite或者fputs函数中的任意一个,把post的请求格式发给fsockopen()打开的资源句柄,这时候一个伟大的socket模拟的post请求就诞生了。
代码如下
<"$errstr ($errno)" ); } // close the socket connection: fclose($fp); // split the result header from the content $result = explode("rnrn", $result, 2); // return as structured array: return array( 'status' => 'ok', 'header' => isset($result[0]) "color: #ff0000">这个代码有两点要注意:
一是他是http的post 请求;
二是表单上传协议,
下的请求 串适合任何语言.
代码如下
<"jb51.net"; $boundary = "---------------------".substr(md5(rand(0,32000)),0,10); // Build the header $header = "POST /api.php"; $header .= "Host: {$remote_server}rn"; $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"; } */ $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_name"rn"; $data .= "Content-Type: $content_typernrn"; $data .= "".$content_file."rn"; $data .="--$boundary--rn"; $header .= "Content-length: " . strlen($data) . "rnrn"; // Open the connection $fp = fsockopen($remote_server, 80); // then just fputs($fp, $header.$data); // reader while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp);希望本文对大家的 PHP程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 群星.2022-福茂巨星·时空之轮日本唱片志系列DISC2范晓萱-RAIN【福茂】【WAV+CUE】
- 王闻-《男人四十4》[正版CD低速原抓WAV+CUE]
- 青燕子-八只眼演唱组《爱心》[WAV+CUE]
- 祁露想着你的好》WAV+CUE
- 陈致逸《赴梦之约 游戏主题原声音乐》[FLAC/分轨][159.96MB]
- 贵族音乐《睡眠自然流水声 ASMR白噪音背景音》[320K/MP3][155.72MB]
- 贵族音乐《睡眠自然流水声 ASMR白噪音背景音》[FLAC/分轨][857.58MB]
- 朱昕嵘《琴意绵绵6N纯银SQCD》[WAV+CUE]
- 降央卓玛《草原情6N纯银SQCD》WAV+CUE
- 傲日格乐《黑马琴HQCD》[WAV+CUE]
- 群星.2022-福茂巨星·时空之轮日本唱片志系列DISC3范晓萱-自言自语【福茂】【WAV+CUE】
- 群星.2022-福茂巨星·时空之轮日本唱片志系列DISC4那英-白天不懂夜的黑【福茂】【WAV+CUE】
- 群星.2015-华丽上班族电影原声大碟【大右音乐】【WAV+CUE】
- 陈粒《乌有乡地图》[320K/MP3][21.81MB]
- 陈粒《乌有乡地图》[FLAC/分轨][398.39MB]