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

首頁 > 開發(fā) > PHP > 正文

php自定義類fsocket模擬post或get請求的方法

2024-05-04 23:38:30
字體:
供稿:網(wǎng)友

這篇文章主要介紹了php自定義類fsocket模擬post或get請求的方法,涉及php使用socket模擬post及get請求的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了php自定義類fsocket模擬post或get請求的方法。分享給大家供大家參考。具體如下:

zsocket.class.php文件如下:

 

  1. <?php 
  2. class ZSocket { 
  3. /* 
  4. * Init  
  5. */ 
  6. private function _fsockopen($host, $port, &$errno, &$errstr, $timeout){ 
  7. $ip = @gethostbyname($host); 
  8. $s = @socket_create(AF_INET, SOCK_STREAM, 0); 
  9. if(socket_set_nonblock($s)){ 
  10. $r = @socket_connect($s, $ip, $port); 
  11. if ($r || socket_last_error() == EINPROGRESS) { 
  12. $errno = EINPROGRESS; 
  13. return $s; 
  14. $errno = socket_last_error($s); 
  15. $errstr = socket_strerror($errno); 
  16. socket_close($s); 
  17. return false
  18. /* 
  19. * 設(shè)置Cookie 
  20. */ 
  21. private function _setCookie($cookie){ 
  22. $_cookies = explode("; ",$cookie); 
  23. $_tmp = explode("=",$_cookies[0]); 
  24. setcookie($_tmp[0], $_tmp[1]); 
  25. return $_cookies; 
  26. /* 
  27. * 獲取返回數(shù)據(jù)header內(nèi)容 
  28. */ 
  29. private function _getDataHeader(&$fp,&$reHeader,&$cookies){ 
  30. $maxlen = 0; 
  31. while(!feof($fp)){ 
  32. $line = fgets($fp,1024); 
  33. if(substr($line, 0, 12) == 'Set-Cookie: '){ $cookies[] = $this->_setCookie(substr($line, 12)); } 
  34. $reHeader .= $line; 
  35. if(substr($line, 0, 16) == 'Content-Length: '){ 
  36. $maxlen = intval(substr($line, 16, -2));  
  37. if($line == "/r/n" || $line == ""break
  38. return $maxlen; 
  39. /* 
  40. * 獲取返回數(shù)據(jù)正文內(nèi)容 
  41. */ 
  42. private function _getDataBody(&$fp,$maxlen){ 
  43. $reData = ""
  44. while(!feof($fp)){ 
  45. $line = fgets($fp,$maxlen+1); 
  46. $reData .= $line; 
  47. if(strlen($line) < $maxlen) $maxlen = $maxlen - strlen($line); 
  48. else break
  49. return $reData; 
  50. /* 
  51. * 設(shè)置并返回要發(fā)送的header內(nèi)容 
  52. */ 
  53. public function get_HeaderInfo($host,$type='GET',$file='/',$params=array(),$head=array(),$cookies=array()){ 
  54. $_params = $_cookies = ''
  55. if(is_array($params)){ 
  56. foreach($params as $key=>$value){  
  57. $_params .= "&".$key."=".urlencode($value);  
  58. $_params = (strlen($_params) > 1) ? substr($_params,1) : ''
  59. }else if(is_string($params)){ 
  60. $_params = urlencode($params); 
  61. foreach($cookies as $key=>$value){ 
  62. $_cookies .= "; ".$key."=".urlencode($value);  
  63. $_cookies = (strlen($_cookies) > 2) ? substr($_cookies,2) : ''
  64. $file .= ($type == 'GET') ? ($_params == '' ? '' : '?'.$_params) : ''
  65. $header = $type." ".$file." HTTP/1.1/r/n"
  66. $header .= "Host: ".$host."/r/n"
  67. //$header .= "Referer: ".get_ip()."/r/n"; 
  68. //$header .= "X-Forwarded-For: ".get_ip()."/r/n"; 
  69. $header .= ($type == 'GET') ? '' : "Content-Type: application/x-www-form-urlencoded/r/n"
  70. if(is_array($head) && $head != array()){ 
  71. foreach($head as $k=>$v){ 
  72. $header .= $k.": ".$v."/r/n"
  73. $header .= "Content-Length: ".strlen($_params)."/r/n"
  74. if($_cookies != '') $header .= "Cookie: ".$_cookies."/r/n"
  75. /* 
  76. foreach($_SERVER as $name => $value){ 
  77. if(substr($name, 0, 5) == 'HTTP_' && $name != 'HTTP_HOST'){ 
  78. $header .= str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5))))).":".$value."/r/n"; 
  79. } 
  80. } 
  81. */ 
  82. $header .= "Connection: Close/r/n/r/n"
  83. $header .= $_params."/r/n"
  84. return $header; 
  85. /* 
  86. * 發(fā)送,并返回結(jié)果 Array 
  87. */ 
  88. public function get_SendData($host,$port=80,$header=''){ 
  89. if(function_exists('fsockopen')){ 
  90. $fp = fsockopen($host,$port,$errno,$errstr,10); 
  91. }else if(function_exists('pfsockopen')){ 
  92. $fp = pfsockopen($host,$port,$errno,$errstr,10); 
  93. }else if(function_exists('stream_socket_client')){ 
  94. $fp = stream_socket_client($host.':'.$port,$errno,$errstr,10); 
  95. }else
  96. $fp = $this->_fsockopen($host,$port,$errno,$errstr,10); 
  97. $fp = fsockopen($host,$port,$errno,$errstr,10); 
  98. if(!$fp) return array('header'=>'','data'=>$errstr."--->".$errno,'cookie'=>''); 
  99. $reHeader = $reData = ""
  100. $cookies = array(); 
  101. fputs($fp,$header); 
  102. $maxlen = $this->_getDataHeader($fp,$reHeader,$cookies); 
  103. $reData = $this->_getDataBody($fp,$maxlen); 
  104. fclose($fp); 
  105. return array('header'=>$reHeader,'data'=>$reData,'cookie'=>$cookies); 

demo代碼如下:

 

 
  1. $host = 'm.survivalescaperooms.com'
  2. $port = '80'
  3. $type = 'POST'
  4. $file = '/'
  5. $params = ''
  6. //include_once('include/zsocket.class.php'); //include 
  7. $zsk = new ZSocket(); 
  8. $header = $zsk->get_HeaderInfo($host,$type,$file,$params); 
  9. $data = $zsk->get_SendData($host,$port,$header); 
  10. /* 
  11. echo "<!--/r/n"; 
  12. print_r($header); 
  13. print_r($data); 
  14. echo "-->/r/n"; 
  15. */ 
  16. var_dump($header); 
  17. var_dump($data); 

希望本文所述對大家的php程序設(shè)計有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 屯昌县| 塔河县| 沈阳市| 连江县| 视频| 壤塘县| 宁都县| 鹿邑县| 江山市| 富源县| 花莲县| 略阳县| 长汀县| 甘德县| 莱西市| 开化县| 芜湖市| 遵化市| 平定县| 清镇市| 辉南县| 盈江县| 铜陵市| 恩平市| 玛曲县| 宿州市| 来安县| 安图县| 武夷山市| 德格县| 田东县| 廉江市| 巴彦淖尔市| 广河县| 东安县| 隆尧县| 凤阳县| 饶河县| 德兴市| 手游| 农安县|