/**
* 非阻塞http请求支持GET
* @param $url
* @param int $timeout
* @param string $ip
* @param string $cookie
* @return array|string
*/
public function httpUnblockFsockOpen($url,$timeout = 10,$ip = '',$cookie = '') {
$return = '';
$uri = parse_url($url);
isset($uri['host']) ||$uri['host'] = '';
isset($uri['path']) || $uri['path'] = '';
isset($uri['query']) || $uri['query'] = '';
isset($uri['port']) || $uri['port'] = '';
$host = $uri['host'];
$path = $uri['path'] ? $uri['path'] . ($uri['query'] ? '?' . $uri['query'] : '') : '/';
$port = !empty($uri['port']) ? $uri['port'] : 80;
$out = "GET $path HTTP/1.0\r\n";
$out .= "Accept: */*\r\n";
$out .= "Accept-Language: zh-cn\r\n";
$out .= "User-Agent: $_SERVER[HTTP_USER_AGENT]\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n";
$out .= "Cookie: $cookie\r\n\r\n";
try {
$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);
if (!$fp) {
return ['retCode' => -1,'errMsg' => $errstr.':'.$errno];
} else {
stream_set_blocking($fp, 0);#非阻塞模式
//设置流的超时时间
stream_set_timeout($fp, $timeout);
@fwrite($fp, $out);
@fclose($fp);
return $return;
}
}catch (\Exception $e){
return ['retCode' => -1,'errMsg' => $e->getMessage()];
}
}