国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

PHP socket 模擬POST 請求實例代碼

2020-03-22 19:13:02
字體:
來源:轉載
供稿:網友
我們用到最多的模擬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
html' target='_blank'>Cookie: 網站cookie,不用俺過多解釋,對吧
User-Agent: 用戶代理,操作系統及版本、CPU 類型、瀏覽器及版本等信息
Host: 要發送到的主機地址
Content-Length: 發送數據的長度
Pragma: 本地是否存在緩存
Cache-Control: 是否需要網頁緩存
Connection: 連接狀態
username=fengdingbo&password=phpstudy.net //post發送的數據
我想大家對表單的post方法提交數據應該是最熟悉不過了,例如我們想把用戶名和密碼發送給某個頁面的時候,填寫好相應的input框,點擊提交按鈕,最后把這個表單發送到action程序的就是以上數據。知道了這一點我想就不難了
這時候我們只需要用php的socket打開一個端口,例如80端口,把以上信息利用這個端口發送給目的程序就行了。
我們如何在一個端口上建立一個socket通道呢?
在PHP中是如此簡單呢!
官方給的原型:
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請求就誕生了。
代碼如下 * SOCKET擴展函數 * @copyright (c) 2013 * @author Qiufeng fengdingbo@gmail.com * @link http://www.phpstudy.net * @version 1.0 * Post Request * @param string $url * @param array $data * @param string $referer * @return arrayif ( ! function_exists('socket_post')) function socket_post($url, $data, $referer='') if( ! is_array($data)) return; $data = http_build_query($data); $url = parse_url($url); if ( ! isset($url['scheme']) || $url['scheme'] != 'http') die('Error: Only HTTP request are supported !'); $host = $url['host']; $path = isset($url['path']) $url['path'] : '/'; // open a socket connection on port 80 - timeout: 30 sec $fp = fsockopen($host, 80, $errno, $errstr, 30); if ($fp) // send the request headers: $length = strlen($data); $POST = HEADERPOST {$path} HTTP/1.1Accept: text/plain, text/htmlReferer: {$referer}Accept-Language: zh-CN,zh;q=0.8Content-Type: application/x-www-form-urlencodem Cookie: token=value; pub_cookietime=2592000; pub_sauth1=value; pub_sauth2=valueUser-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17Host: {$host}Content-Length: {$length}Pragma: no-cacheCache-Control: no-cacheConnection: closern{$data}HEADER; fwrite($fp, $POST); $result = ''; 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 array: return array( 'status' = 'ok', 'header' = isset($result[0]) $result[0] : '', 'content' = isset($result[1]) $result[1] : ''print_r(socket_post('http://www.phpstudy.net/', array('name='= 'qiufeng','password'= md5('www.phpstudy.net'))));/* e.g: socket_post('http://www.phpstudy.net', array('name='= 'qiufeng','password'= md5('phpstudy.net'))); *//* End of file socket_helper.php */實際上,當socket通道打開時,我們傳的COOKIE是正確的話,(截圖運行的php代碼來自上邊,運行后返回的網頁出現了我的用戶名,說明對方網站已經承認我已經登錄了)咱就可以干N多事情,比如刷帖,刷回復等,你們懂的,對吧?

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 乐业县| 焉耆| 宝兴县| 大荔县| 江永县| 临桂县| 石门县| 峨眉山市| 青州市| 馆陶县| 仁化县| 丰县| 盐亭县| 松桃| 福建省| 怀化市| 泰兴市| 扶余县| 宁陵县| 老河口市| 湖南省| 循化| 鄢陵县| 奉化市| 泽库县| 华安县| 托克托县| 新和县| 延安市| 长春市| 高要市| 合作市| 辛集市| 中方县| 奎屯市| 桂东县| 曲沃县| 喀喇沁旗| 阿勒泰市| 大足县| 依安县|