php fsockopen函数发送post,get请求获得网页内容,反防采集

五月 09, 2019 | views
Comments 0

  1. $post =1; 
  2. $url = parse_url($url); 
  3. $host ='http://www.phpfensi.com'
  4. $path ='/'
  5. $query ='?action=phpfensi.com'
  6. $port =80; 
  7.   
  8. if($post) { 
  9.   $out = "post $path http/1.0 "
  10.   $out .= "accept: */* "
  11.   //$out .= "referer: $boardurl "; 
  12.   $out .= "accept-language: zh-cn "
  13.   $out .= "content-type: application/x-www-form-urlencoded "
  14.   $out .= "user-agent: $_server[http_user_agent] "
  15.   $out .= "host: $host "
  16.   $out .= 'content-length: '.strlen($post)." "
  17.   $out .= "connection: close "
  18.   $out .= "cache-control: no-cache "
  19.   $out .= "cookie: $cookie "
  20.   $out .= $post
  21.  } else { 
  22.   $out = "get $path http/1.0 "
  23.   $out .= "accept: */* "
  24.   //$out .= "referer: $boardurl "; 
  25.   $out .= "accept-language: zh-cn "
  26.   $out .= "user-agent: $_server[http_user_agent] "
  27.   $out .= "host: $host "
  28.   $out .= "connection: close "
  29.   $out .= "cookie: $cookie "
  30.  } 
  31.  $fp = @fsockopen(($ip ? $ip : $host), $port$errno$errstr$timeout); 
  32.  if(!$fp)  
  33.  { 
  34.   return '';//note $errstr : $errno  
  35.  } else { 
  36.   return '成功访问'
  37.  }

fsockopen语法:resource fsockopen(string $hostname [,int $port = -1 [, int &$errno [,string &$errstr [, float $timeout = ini_get("default_socket_timeout") ]]]] ) 

启动一个套接字连接到指定的主机的资源,php支持在互联网领域的目标和unix在所支持的套接字传输列表说明,所支持的传输列表也可以检索使用stream_get_transports().

该插座预设会被启用,阻塞模式,你可以切换到非阻塞模式使用stream_set_blocking(),如果上面实例看不懂,就来看个简的吧,代码如下:

  1. $fp = fsockopen("www.phpfensi.com", 80, $errno$errstr, 30); 
  2.  if (!$fp) { 
  3.   echo "$errstr ($errno) "
  4.  } else { 
  5.   $out = "get / http/1.1 "
  6.   $out .= "host: www.phpfensi.com"
  7.   $out .= "connection: close "
  8.   fwrite($fp$out); 
  9.   while (!feof($fp)) { 
  10.    echo fgets($fp, 128); 
  11.   } 
  12.   fclose($fp); 
  13.  }



zend