fsockopen封装

  • 来源:
  • 更新日期:2018-04-24

摘要:/**      *  post数据      *  @param string $url        post的url      *  @param int $limit        返回的数据的长度      *  @param string $post        post数据,字符串形式username=\'dalarge\'&password=\'123456\'      *

/**

146163b9301S0-136108(2).jpg

* post数据

* @param string $url post的url

* @param int $limit 返回的数据的长度

* @param string $post post数据,字符串形式username=\'dalarge\'&password=\'123456\'

* @param string $cookie 模拟 cookie,字符串形式username=\'dalarge\'&password=\'123456\'

* @param string $ip ip地址

* @param int $timeout 连接超时时间

* @param bool $block 是否为阻塞模式

* @return string 返回字符串

*/

 

private function _ps_post($url, $limit = 0, $post = \'\', $cookie = \'\', $ip = \'\', $timeout = 15, $block = true) {

$return = \'\';

$matches = parse_url($url);

$host = $matches[\'host\'];

$path = $matches[\'path\'] ? $matches[\'path\'].($matches[\'query\'] ? \'?\'.$matches[\'query\'] : \'\') : \'/\';

$port = !empty($matches[\'port\']) ? $matches[\'port\'] : 80;

$siteurl = $this->_get_url();

if($post) {

$out = "POST $path HTTP/1.1rn";

$out .= "Accept: */*rn";

$out .= "Referer: ".$siteurl."rn";

$out .= "Accept-Language: zh-cnrn";

$out .= "Content-Type: application/x-www-form-urlencodedrn";

$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]rn";

$out .= "Host: $hostrn" ;

$out .= \'Content-Length: \'.strlen($post)."rn" ;

$out .= "Connection: Closern" ;

$out .= "Cache-Control: no-cachern" ;

$out .= "Cookie: $cookiernrn" ;

$out .= $post ;

} else {

$out = "GET $path HTTP/1.1rn";

$out .= "Accept: */*rn";

$out .= "Referer: ".$siteurl."rn";

$out .= "Accept-Language: zh-cnrn";

$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]rn";

$out .= "Host: $hostrn";

$out .= "Connection: Closern";

$out .= "Cookie: $cookiernrn";

}

$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);

if(!$fp) return \'\';

 

stream_set_blocking($fp, $block);

stream_set_timeout($fp, $timeout);

@fwrite($fp, $out);

$status = stream_get_meta_data($fp);

 

if($status[\'timed_out\']) return \'\';

while (!feof($fp)) {

if(($header = @fgets($fp)) && ($header == "rn" || $header == "n")) break;

}

 

$stop = false;

while(!feof($fp) && !$stop) {

$data = fread($fp, ($limit == 0 || $limit > 8192 ? 8192 : $limit));

$return .= $data;

if($limit) {

$limit -= strlen($data);

$stop = $limit <= 0;

}

}

@fclose($fp);

 

//部分虚拟主机返回数值有误,暂不确定原因,过滤返回数据格式

$return_arr = explode("n", $return);

if(isset($return_arr[1])) {

$return = trim($return_arr[1]);

}

unset($return_arr);

 

return $return;

}